HUD P1561
来源:互联网 发布:算法交易策略 编辑:程序博客网 时间:2024/04/30 10:17
The more, The Better
Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2939 Accepted Submission(s): 1740
Problem Description
ACboy很喜欢玩一种战略游戏,在一个地图上,有N座城堡,每座城堡都有一定的宝物,在每次游戏中ACboy允许攻克M个城堡并获得里面的宝物。但由于地理位置原因,有些城堡不能直接攻克,要攻克这些城堡必须先攻克其他某一个特定的城堡。你能帮ACboy算出要获得尽量多的宝物应该攻克哪M个城堡吗?
Input
每个测试实例首先包括2个整数,N,M.(1 <= M <= N <= 200);在接下来的N行里,每行包括2个整数,a,b. 在第 i 行,a 代表要攻克第 i 个城堡必须先攻克第 a 个城堡,如果 a = 0 则代表可以直接攻克第 i 个城堡。b 代表第 i 个城堡的宝物数量, b >= 0。当N = 0, M = 0输入结束。
Output
对于每个测试实例,输出一个整数,代表ACboy攻克M个城堡所获得的最多宝物的数量。
赤裸裸的水TreeDP,解释完毕。
#include<stdio.h>#include<string.h>#include<vector>#define maxn 210#define Clear(a,b) memset(a,b,sizeof(a))using namespace std;int dp[maxn][maxn],val[maxn];int m;vector <int> links[maxn];int Max(int a,int b){ if (a > b) return a; return b;}int dfs(int k){ int len = links[k].size(),i,j,c,son; for(i = 1;i <= m;i++) dp[k][i] = val[k]; if (len == 0) {/* printf("%d:",k); for(i = 1;i <= m;i++) printf(" %d",dp[k][i]); printf("\n"); */ return 0; } for(i = 0;i < len;i++) dfs(links[k][i]); for(i = 0;i < len;i++) { son = links[k][i]; for(c = m;c >= 1;c--) for(j = 1;j <= c;j++) if (c - j >= 1) dp[k][c] = Max(dp[k][c],dp[k][c-j] + dp[son][j]); }/* printf("%d:",k); for(i = 1;i <= m;i++) printf(" %d",dp[k][i]); printf("\n"); */ return 0; }int work(){ int n,i,fa; scanf("%d%d",&n,&m); if (n == 0 && m == 0) return 0; Clear(dp,0); Clear(val,0); for(i = 0;i <= n;i++) links[i].clear(); for(i = 1;i <= n;i++) { scanf("%d%d",&fa,&val[i]); links[fa].push_back(i); } m++; dfs(0); printf("%d\n",dp[0][m]); return 1;}int main(){ while(work()); return 0;}
- HUD P1561
- HUD
- 贪心——洛谷 P1561 [USACO12JAN]爬山Mountain Climbing
- 洛谷P1561 [USACO12JAN]爬山Mountain Climbing(贪心)
- HUD 1000
- HUD 1033
- HUD 4038
- HUD 4473
- HUD 4502
- Hud 4608
- hud 2073
- hud 1518
- HUD-1142
- Unity HUD
- UDK HUD
- hud 2795
- hud 4288
- hud Fibonacci
- 第03章 面向对象 40 多态2
- chm打不开,提示 :已取消到该网页的导航。
- #2006 - MySQL server has gone away 问题解决方法
- 第03章 面向对象 41抽象类
- CentOS 5.8 asterisk-1.8.10.1 安装之三:暴露SIP服务器到公网上,让我可以用xlite从internet访问Asterisk并拨打电话
- HUD P1561
- C语言 复杂指针的申明问题 数组指针 指针数组 函数指针 指针函数一览无遗! C/C++求职面试必备考点(四)
- inet_aton和inet_network和inet_addr三者比较
- 关于自动流转是否会自动执行bofore和after里面的函数
- MVC ViewData和ViewBag
- Android源码学习之环境搭建(Ubuntu下载Android源码)
- 如何基于FFMPEG和SDL写一个少于1000行代码的视频播放器
- 降级论:智商高的IT人,你比沙县老板强吗
- 【hdu】 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 (多重背包 模板)