Tyvj 1051 选课 树形dp

来源:互联网 发布:java 打war包 编辑:程序博客网 时间:2024/05/22 00:47
#include<cstdio>#include<cstring>#include<vector>#include<algorithm>using namespace std;const int N =310;int val[N];vector<int>g[N];int dp[N][N];void dfs(int  rt,int m){if(m==0) {return;}for(int h=0;h<g[rt].size();h++){int u=g[rt][h];for(int i=0;i<=m;i++){dp[u][i]=dp[rt][i];}dfs(u,m-1);for(int i=m;i>=1;i--){dp[rt][i]=max(dp[rt][i],dp[u][i-1]+val[u]);}}}int main(){int n,m;while(scanf("%d%d",&n,&m)!=EOF){for(int i=0;i<=n;i++){g[i].clear();}int x;val[0]=0;for(int i=1;i<=n;i++){scanf("%d%d",&x,&val[i]);if(x==0) g[0].push_back(i);else g[x].push_back(i);}memset(dp,0,sizeof(dp));dfs(0,m);printf("%d\n",dp[0][m]);}return 0;}

0 0
原创粉丝点击