很好的树形DP入门题,看着和选课那道题如出一辙。

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 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
 
Sample Output
5 13
  
  直接上代码啦:

 #include <iostream>
#include <cstdio>
#include <cstring> using namespace std; int dp[][],map[][];
int num[];
bool visited[];
int N,M; inline int max(int a,int b)
{
if(a>b) return a;
return b;
} int TreeDP(int father)
{
visited[father]=true; //第father号城市已访问过
for(int i=;i<=num[father];i++) //遍历以father为根节点的子节点
{
int son=map[father][i];
if(!visited[son]) TreeDP(son);//递归遍历直至为叶子节点,然后返回
for(int j=M;j>=;j--)//j>=2的原因是输入a,b是j=1已经考虑进去了
for(int k=;k<j;k++)//拆分
{
if(dp[father][j-k]!=-&&dp[son][k]!=-)//是否可以进行拆分
dp[father][j]=max(dp[father][j],dp[father][j-k]+dp[son][k]);//由状态转移方程式得
}
}
}
int main()
{
//dp[i][j]代表的是攻克包括第i号城市在内的共j座城市所获得的财富值
int a,b;
while(scanf("%d %d",&N,&M),N||M)//M原本代表ACBoy要攻打城市的个数,但为了方便森林变成数时更好统计就把M++,这样0号城市也纳入其中
{
memset(dp,-,sizeof(dp));
memset(num,,sizeof(num));//num[father]表示以father为根节点的子节点个数有多少个
dp[][]=;
for(int i=;i<=N;i++)
{
scanf("%d %d",&a,&b);
dp[i][]=b; //攻打第i号城市的财富值
map[a][++num[a]]=i; //构成一棵树,第0号城市为根节点
}
M++;
for(int i=;i<=N;i++)//初始化
{
dp[i][]=;
visited[i]=false;
}
TreeDP();
printf("%d\n",dp[][M]);
} return ;
}

dp[i][j]代表的是包括第i座城市在内的共j座城市所获得的最大财富值

树形DP-HDU1561 The more, The Better的更多相关文章

  1. 树形dp hdu1561

    有的堡垒攻克需要攻克另一个堡垒,形成一个森林,最多攻克m个堡垒,求获得宝物的最大价值. 1,以0做根将森林形成树: 2,用背包计算当前节点下需要攻克k个堡垒能获得的宝物最大价值,但是注意同一个根节点的 ...

  2. 【树形dp小练】HDU1520 HDU2196 HDU1561 HDU3534

    [树形dp]就是在树上做的一些dp之类的递推,由于一般须要递归处理.因此平庸情况的处理可能须要理清思路.昨晚開始切了4题,作为入门训练.题目都很easy.可是似乎做起来都还口以- hdu1520 An ...

  3. hdu1561 The more, The Better (树形dp+背包)

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1561 思路:树形dp+01背包 //看注释可以懂 用vector建树更简单. 代码: #i ...

  4. 树形dp专辑

    hdu 2196 http://acm.hdu.edu.cn/showproblem.php?pid=2196 input 5//5个结点 1 1//表示结点2到结点1有一条权值为1的边 2 1//表 ...

  5. 树形动态规划(树形DP)入门问题—初探 & 训练

    树形DP入门 poj 2342 Anniversary party   先来个题入门一下~ 题意: 某公司要举办一次晚会,但是为了使得晚会的气氛更加活跃,每个参加晚会的人都不希望在晚会中见到他的直接上 ...

  6. 树形DP小结

    树形DP1.简介:树是一种数据结构,因为树具有良好的子结构,而恰好DP是从最优子问题更新而来,那么在树上做DP操作就是从树的根节点开始深搜(也就是记忆化搜索),保存每一步的最优结果.tips:树的遍历 ...

  7. 树形 DP 总结

    树形 DP 总结 本文转自:http://blog.csdn.net/angon823/article/details/52334548 介绍 1.什么是树型动态规划 顾名思义,树型动态规划就是在“树 ...

  8. poj3417 LCA + 树形dp

    Network Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 4478   Accepted: 1292 Descripti ...

  9. COGS 2532. [HZOI 2016]树之美 树形dp

    可以发现这道题的数据范围有些奇怪,为毛n辣么大,而k只有10 我们从树形dp的角度来考虑这个问题. 如果我们设f[x][k]表示与x距离为k的点的数量,那么我们可以O(1)回答一个询问 可是这样的话d ...

  10. 【BZOJ-4726】Sabota? 树形DP

    4726: [POI2017]Sabota? Time Limit: 20 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 128  Solved ...

随机推荐

  1. 为IIS Host ASP.NET Web Api添加Owin Middleware

    将OWIN App部署在IIS上 要想将Owin App部署在IIS上,只添加Package:Microsoft.OWIN.Host.SystemWeb包即可.它提供了所有Owin配置,Middlew ...

  2. erlang使用心跳模式启动shell

    资料http://blog.yufeng.info/archives/2832 借鉴自从http://blog.csdn.net/mycwq/article/details/18306753 测试例子 ...

  3. curl -I 说明

    curl -I 查看header头信息

  4. java代码关于匿名内部类和接口的方法使用

    总结:主要是多个按钮实现监听时,能够响应不同的事件 以上步骤我们可以用多种方法实现.但人们通常用二种方法.第一种方法是只利用一个监听器以及多个if语句来决定是哪个组件产生的事件:第二种方法是使用多个内 ...

  5. C# winform中PictureBox控件的SizeMode模式

    SizeMode属性有五种模式, Normal →标准模式, 在此模式下, 图片位于PictureBox的左上角, 图片的大小由PictureBox控件的大小决定, 当图片的大小大于PictureBo ...

  6. python中的异常处理机制

    python中的异常处理 1.什么是异常 异常就是程序运行时发生错误的信号(在程序出现错误时,则会产生一个异常,若程序没有处理它,则会抛出该异常,程序的运行也随之终止),在python中,错误触发的异 ...

  7. DVWA平台v1.8-SQL注入(low级别)

    代码 <?php if(isset($_GET['Submit'])){ // Retrieve data $id = $_GET['id']; $getid = "SELECT fi ...

  8. PHP字符串的处理(四)-HTML标签的字符串格式化

    和html标签相关的字符串格式化 nl2br()  //在字符串中每个新行"\n"之前插入html换行符"<br />" <?php echo ...

  9. springboot成神之——RestTemplate访问Rest

    本文介绍RestTemplate访问Rest demo package com.springlearn.learn; import java.util.Arrays; import org.sprin ...

  10. Command对象