luogu 2014 选课 树上背包
Posted asdic
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了luogu 2014 选课 树上背包相关的知识,希望对你有一定的参考价值。
树上背包
#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 ",f[0][m]); }
以上是关于luogu 2014 选课 树上背包的主要内容,如果未能解决你的问题,请参考以下文章