树形dp入门练习(hdu1011+hdu1061)
hdu1011 和 hdu1561类似,给定每个节点的花费以及价值,并且子节点必须在父亲节点取到以后才可以被取到
相当于是在树上进行的01背包
dp时考虑每一个子树 root和它的每一个儿子,状态转移方程为
dp[root][j]=max(dp[root][j],dp[root][j-k]+dp[ son[p] ][ k ])
以下为ac代码
hdu1011:这题有一个小坑,最后必须要剩余至少一个人。。开始没考虑到,一直wa
#include<stdio.h>
#include<iostream>
#include<stdlib.h>
#include<math.h>
#include<ctype.h>
#include<algorithm>
#include<string>
#include<string.h>
#include<queue>
#define mod 1000000007
#define MAX 100000000
using namespace std;
int t,n,m,p,k,tt;
int map[][];
int dp[][];
int a[];
int w[];
int vi[];
void dfs(int s)
{
vi[s]=;
int cost=(w[s]+)/;
for(int i=cost;i<=m;i++)
dp[s][i]=a[s];
for(int i=;i<=n;i++)
{
if(!map[s][i])
continue;
if(vi[i])
continue;
dfs(i);
for(int k=m;k>=cost;k--)
for(int j=;j+cost<=k;j++)
dp[s][k]=max(dp[s][k],dp[s][k-j]+dp[i][j]); }
}
int main()
{
while(scanf("%d%d",&n,&m)&&(n!=-||m!=-))
{
int x,y;
memset(map,,sizeof(map));
memset(dp,,sizeof(dp));
memset(vi,,sizeof(vi));
a[]=;
for(int i=;i<=n;i++)
{
scanf("%d%d",w+i,a+i);
}
for(int i=;i<n;i++)
{
scanf("%d%d",&x,&y);
map[x][y]=;
map[y][x]=;
}
if(m==)
{
puts("");
continue;
}
dfs();
printf("%d\n",dp[][m]);
}
return ;
}
hdu 1561
#include<stdio.h>
#include<iostream>
#include<stdlib.h>
#include<math.h>
#include<ctype.h>
#include<algorithm>
#include<string>
#include<string.h>
#include<queue>
#define mod 1000000007
#define MAX 100000000
using namespace std;
int t,n,m,p,k,tt;
int map[][];
int dp[][];
int a[];
void dfs(int s)
{
for(int j=;j<=m+;j++)
dp[s][j]=a[s];
for(int i=;i<=n;i++)
{
if(!map[s][i])
continue;
dfs(i);
for(int k=m+;k>=;k--)
for(int j=;j+<=k;j++)
dp[s][k]=max(dp[s][k],dp[s][k-j]+dp[i][j]); } }
int main()
{
while(scanf("%d%d",&n,&m)&&(n+m))
{
memset(map,,sizeof(map));
memset(dp,,sizeof(dp));
int x;
a[]=;
for(int i=;i<=n;i++)
{
scanf("%d",&x);
map[x][i]=;
scanf("%d",a+i);
}
dfs();
printf("%d\n",dp[][m+]);
}
return ;
}
树形dp入门练习(hdu1011+hdu1061)的更多相关文章
- POJ 2342 树形DP入门题
有一个大学的庆典晚会,想邀请一些在大学任职的人来參加,每一个人有自己的搞笑值,可是如今遇到一个问题就是假设两个人之间有直接的上下级关系,那么他们中仅仅能有一个来參加,求请来一部分人之后,搞笑值的最大是 ...
- 树形dp 入门
今天学了树形dp,发现树形dp就是入门难一些,于是好心的我便立志要发一篇树形dp入门的博客了. 树形dp的概念什么的,相信大家都已经明白,这里就不再多说.直接上例题. 一.常规树形DP P1352 没 ...
- 树形DP入门详解+题目推荐
树形DP.这是个什么东西?为什么叫这个名字?跟其他DP有什么区别? 相信很多初学者在刚刚接触一种新思想的时候都会有这种问题. 没错,树形DP准确的说是一种DP的思想,将DP建立在树状结构的基础上. 既 ...
- [poj2342]Anniversary party树形dp入门
题意:选出不含直接上下司关系的最大价值. 解题关键:树形dp入门题,注意怎么找出根节点,运用了并查集的思想. 转移方程:dp[i][1]+=dp[j][0];/i是j的子树 dp[i][0]+=max ...
- LuoGu-P1122 最大子树和+树形dp入门
传送门 题意:在一个树上,每个加点都有一个值,求最大的子树和. 思路:据说是树形dp入门. 用dfs,跑一边,回溯的时候求和,若和为负数,则减掉,下次不记录这个节点. #include <ios ...
- (树形DP入门题)Anniversary party(没有上司的舞会) HDU - 1520
题意: 有个公司要举行一场晚会.为了让到会的每个人不受他的直接上司约束而能玩得开心,公司领导决定:如果邀请了某个人,那么一定不会再邀请他的直接的上司,但该人的上司的上司,上司的上司的上司等都可以邀请. ...
- hdu_Anniversary party_(树形DP入门题)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1520 题意:有N个人,N-1个人有自己的上司,每个人有一个快乐值,如果这个人参加了聚会,那么这个人的直 ...
- 树形DP入门题目推荐以及解析
关于树形DP几道入门题目 今天恶补树形DP,感觉海星. 其实挺简单的. 介绍几道例题,我会的. 1.洛谷P1352 没有上司的舞会 我的一篇题解 我们可以考虑每一个节点都是有两种情况. 一个是被邀请: ...
- 树形DP入门学习
这里是学习韦神的6道入门树形dp进行入门,本来应放在day12&&13里,但感觉这个应该单独放出来好点. 这里大部分题目都是参考的韦神的思想. A - Anniversary part ...
- HDU 1561 树形DP入门
The more, The Better Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
随机推荐
- codevs 2451 互不侵犯(状丫dp)
/* 好神奇好神奇...表示自己要学的还很多 注意到n<=9 不是搜索就是状丫 搜索+剪枝 70分 枚举放或者不放 这里用状丫 f[i][j][k] 表示前i行 放了j个国王 i行的状态是k的方 ...
- IIS与ASP.NET 通信机制深度剖析
IIS5.X缺点: ISAPI 动态连接库被加载到InetInfo.exe 进程中,它和工作进程之间是一种典型的跨进程通信方式,尽管采用命名管道,但是仍然会带来性能的瓶颈. 所有的 ASP.NET 应 ...
- 你确定你是一个合格的.Net开发人员吗?
做.net开发已有近5年时间,自认掌握的知识比较全面.最近部门需要招人,今天抽空在网上看了一下,发现我了解的还是不够多啊.下面是我大致的罗列了一下作为一名.Net开发人员所需要掌握的只是.看看你是不是 ...
- tabpagerindictor:mergeReleaseResources FAILED Error:Execution failed for task ':tabpagerindictor:mergeReleaseResources'. > D:\android\adt-bundle-windows-x86_64-20140702\android-open-project-demo-mast
解决:将项目移动到路径少的目录再运行即可 异常日志: D:\android\adt-bundle-windows-x86_64-20140702\android-open-project-demo-m ...
- Lesson 7: Responsive Typography In Action
Lesson 7: Responsive Typography In Action 排版一直都是设计和传达的基础.虽然现在的设计和印刷品设计差别很大,但核心原则还是不变的. Article 1: Bo ...
- android 检查网络是否可用,如果不可用弹出设置,让用户改变
/** * 校验网络,如果没有网络,返回true * * @return boolean */ @Override public boolean hasInternetConnected() { Co ...
- hdu 1829 基础并查集,查同性恋
A Bug's Life Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) To ...
- 学OpenGL的一些好的网站
好的资源太多,自己懂的太少,而今迈步从头越!!fighting...... 一些OpenGL资源链接 这是前几天自己简单整理的几个链接,希望对大家有用 顺便问一下http://www.spacesim ...
- 关于操作DC时的资源泄露
首先应明确一个概念 句柄, 关于句柄的详细介绍请见这里 对于句柄的使用小结:借来的要归还,创建的要释放,选出的要选入[尤其是针对GDI的一些句柄而言,如HPEN,HBRUSH等] 1. 使用GetDC ...
- WINDOW下php开启pgsql拓展
操作步骤: 1.修改php.ini,去掉“extension=php_pgsql.dll ”和“extension=php_pdo_pgsql.dll ”前的分号.2.确认C:\php\ext\下ph ...