邱老师玩游戏

Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others)
Submit Status

邱老师最近在玩一种战略游戏,在一个地图上,有N座城堡,每座城堡都有一定的宝物,在每次游戏中邱老师允许攻克M个城堡并获得里面的宝物。

但由于地理位置原因,有些城堡不能直接攻克,要攻克这些城堡必须先攻克其他某一个特定的城堡。你能帮邱老师算出要获得尽量多的宝物应该攻克哪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

对于每个测试实例,输出一个整数,代表邱老师攻克M个城堡所获得的最多宝物的数量。

Sample input and output

Sample Input Sample Output
3 2
0 1
0 2
0 3
7 4
2 2
0 1
0 4
2 1
7 1
7 6
2 2
0 0
5
13

Source

2015 UESTC Training for Dynamic Programming

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <algorithm>
#include <set>
using namespace std;
typedef long long ll;
typedef unsigned long long Ull;
#define MM(a,b) memset(a,b,sizeof(a));
const double eps = 1e-10;
const int inf =0x7f7f7f7f;
const double pi=acos(-1);
const int N=205;
int n,m,dp[N][N],vlue[N];
vector<int> G[N]; void dfs(int u)
{
dp[u][0]=0;
dp[u][1]=vlue[u];
for(int i=0;i<G[u].size();i++)
{
int v=G[u][i];
dfs(v);
for(int j=m;j>=2;j--)
for(int k=1;k<j;k++)
dp[u][j]=max(dp[u][j],dp[v][k]+dp[u][j-k]);
}
} int main()
{
while(~scanf("%d%d",&n,&m)&&(n||m))
{
m++;
MM(dp,0);
for(int i=0;i<=n;i++) G[i].clear();
for(int i=1;i<=n;i++)
{
int a,b;
scanf("%d%d",&a,&b);
G[a].push_back(i);
vlue[i]=b;
}
dfs(0);
printf("%d\n",dp[0][m]);
}
return 0;
}

  分析:这道题必须要dfs是因为涉及到树的搜索,

设dp[u][j]表示以u为根的子树在选取点的个数至多为j个时能得到的最大权值;

那么接下来枚举下他的每个子节点就好了,转一下状态就好了

最新文章

  1. jQuery的案例及必知重要的jQuery选择器
  2. 数位DP GYM 100827 E Hill Number
  3. QT共享库的创建与调用(初级)(附:UI界面不能被改变的其中一个原因)
  4. CSS3中的2D转换
  5. SQL中的连接查询及其优化原则
  6. trigger
  7. APMServ5.2.6 升级PHP版本 到高版本 5.3,5.4
  8. Java中基础类库使用
  9. Mac 安装Rudy环境 pod安装前的准备工作
  10. 必须掌握的MySQL优化指南
  11. for循环输出空心菱形的形状【java】
  12. 1T硬盘获3T体验 彻底解决NVR存储时间短的问题
  13. JavaScript 模拟 HashMap例子
  14. FreeRTOS 事件标志组
  15. Oracle恢复误删除表操作语句
  16. GeoIP的使用
  17. 使用 sysbench对mysql进行压力测试介绍之一
  18. Java与其它语言的比较
  19. .NET控制台程序监听程序退出
  20. Redis在Windows下安装全过程

热门文章

  1. 怎样理解 Vue 项目的目录结构?
  2. Laravel使用whereHas进行过滤不符合条件的预加载with数据
  3. DevOps与Kubernetes 、容器的关系
  4. 使用WSGI创建REST接口
  5. CentOS7 使用光盘镜像作为yum源
  6. python 列表字典按照字典中某个valu属性进行排序
  7. Kubernetes介绍与核心组件
  8. Makefile 编译静态库文件及链接静态库
  9. 数据总线&amp;地址总线&amp;控制总线
  10. Networker软件安装