HDU 1561
2015-09-23 14:09
344 查看
跟HDU 1011差不多,也是水啊。
#include<iostream> #include<cstdio> #include<vector> using namespace std; const int maxn=205; int dp[maxn][maxn]; int c[maxn],w[maxn]; int n,m; vector<int>G[maxn]; void dfs(int u,int fa) { int cost=1; for(int i=cost;i<=m;i++) dp[u][i]=w[u]; for(int i=0;i<G[u].size();i++) { int v=G[u][i]; if(v==fa) continue; dfs(v,u); for(int j=m;j>=cost;j--)//必须从大到小逆序更新,知道0-1背包二维数组优化成一维的应该很快就能明白 for(int k=1;k+j<=m;k++) if(dp[v][k]) dp[u][j+k]=max(dp[u][j+k],dp[u][j]+dp[v][k]); } } int main() { while(~scanf("%d%d",&n,&m),n+m) { for(int i=0;i<=n;i++) G[i].clear(); fill(&dp[0][0],&dp[maxn][0],0); for(int i=1;i<=n;i++) { scanf("%d%d",&c[i],&w[i]); G[c[i]].push_back(i); } m++; dfs(0,-1); printf("%d\n",dp[0][m]); } return 0; }
相关文章推荐
- Activity的启动模式
- PHP Session可能会引起并发问题
- 队列的数组实现
- ASP.NET 数据库页面访问简单工具
- javascript js保留小数位数的方法
- 如何采用不加锁的方式实现线程同步
- 如何采用不加锁的方式实现线程同步
- TSM 修改control path
- IEtester从重要变鸡肋
- sscanf(), sscanf_s()
- BST、B树、B-树、B+树、B*树
- oracle备份还原
- 第二次作业:个人项目实践
- Great StackOverflow questions
- SQLSERVER 分区分表
- 8种排序
- 小强的HTML5移动开发之路(13)——HTML5中的全局属性
- Myeclipse Source not found 以及 调用javadoc的问题
- 小强的HTML5移动开发之路(13)——HTML5中的全局属性
- 小强的HTML5移动开发之路(13)——HTML5中的全局属性