1. 程式人生 > >luogu 2014 選課 樹上背包

luogu 2014 選課 樹上背包

++ set pan ons span class its -- tor

樹上背包

#include<bits/stdc++.h>

using namespace std;

const int N=310;
const int inf=0x3f3f3f3f;
vector<int> son[N];
int f[N][N],s[N],n,m;

void dfs(int u){
    f[u][0]=0;
    for(int i=0;i<son[u].size();i++){
        int v=son[u][i];
        dfs(v);
        for(int j=m;j>0;j--)
        for
(int k=j;k>=0;k--) if(j-k>=0) f[u][j]=max(f[u][j],f[u][j-k]+f[v][k]); } if(u!=0){ for(int i=m;i>0;i--) f[u][i]=f[u][i-1]+s[u]; } } int main(){ cin>>n>>m; for(int i=1;i<=n;i++){ int x; cin>>x>>s[i]; son[x].push_back(i); } memset(f,
-inf,sizeof f); dfs(0); printf("%d\n",f[0][m]); }

luogu 2014 選課 樹上背包