1 条题解

  • 0
    @ 2025-10-8 16:48:43

    E76 树上背包 P1064 [NOIP2006 提高组] 金明的预算方案

    标程:

    #include<bits/stdc++.h>
    using namespace std;
    const int N=65, M=3.2e4+10;
    int n, m, pool[N*M], w[N], v[N], siz[N], rdfn[N], id;
    vector<int>f[N], G[N];
    void dfs(int x)
    {
        siz[x]=1;
        for(auto y:G[x]) dfs(y), siz[x] += siz[y];
        rdfn[++id]=x;
    }
    signed main()
    {
        ios::sync_with_stdio(0);cin.tie(0), cout.tie(0);
        cin>>m>>n;
        int (&f)[n+2][m+1]=decltype(f)(pool);
        for(int i=1, x;i<=n;++i) cin>>w[i]>>v[i]>>x, v[i]*=w[i], G[x].push_back(i);
        id=0;dfs(0);
        for(int i=1;i<=id;++i)
    	{
            int x=rdfn[i];
            for(int j=0;j<=m;++j)
    		{
                f[i][j]=f[i-siz[x]][j];//秒 
                if(j>=w[x]) f[i][j]=max(f[i][j], f[i-1][j-w[x]]+v[x]);
            }
        }
        cout<<f[id][m]<<'\n';
        //cerr<<"Running Time: "<<(double)clock()/CLOCKS_PER_SEC<<" s\n";
        return 0;
    }
    
    • 1

    E76*【树形DP:树上背包】[NOIP2006 提高组] 金明的预算方案

    信息

    ID
    101
    时间
    1000ms
    内存
    128MiB
    难度
    4
    标签
    递交数
    136
    已通过
    59
    上传者