hdu-The more, The Better
发布日期:2022-02-02 02:58:05 浏览次数:13 分类:技术文章

本文共 954 字,大约阅读时间需要 3 分钟。

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个城堡所获得的最多宝物的数量。
 
Sample Input
3 20 10 20 37 42 20 10 42 17 17 62 20 0
 
Sample Output
513
代码:

#include
#include
#include
#include
#define M 207using namespace std;vector
v[M];int happy[M],vis[M],dp[M][M];int n,m;void dfs(int x){ vis[x]=1; dp[x][1]=happy[x]; int len=v[x].size(); for(int i=0; i
=1; j--) for(int k=1; k
>n>>m) { if(n==0&&m==0)break; int a,b; memset(dp,0,sizeof(dp)); memset(vis,0,sizeof(vis)); for(int i=1; i<=n; i++) { cin>>a>>b; v[a].push_back(i); happy[i]=b; } dfs(0); cout<
<

转载地址:https://blog.csdn.net/u010368749/article/details/14649121 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:hdu-1011
下一篇:FZU-单词问题

发表评论

最新留言

感谢大佬
[***.8.128.20]2024年04月21日 16时31分31秒