[TK] 选课 hzoj-tg#279
该题目是一道树上背包问题,题目的全部思路已写在 树上背包问题 中. 该题目代码只供辅助理解.
struct edge{
int to,w;
};
vector<edge> e[1001];
int n,m,f[1001][1001];
void dfs(int s){
for(edge i:e[s]){
dfs(i.to);
for(int j=n;j>=1;--j){
for(int k=0;k<=j-1;++k){
f[s][j]=max(f[s][j],f[i.to][k]+f[s][j-k-1]+i.w);
}
}
}
}
int main(){
cin>>m>>n;
for(int i=1;i<=m;++i){
int x,y;
cin>>x>>y;
e[x].push_back(edge{i,y});
}
dfs(0);
cout<<f[0][n];
}