hdu 1561 The more, The Better_树状dp
题意:给你一棵树,各个节点都有价值(除根节点),从根节点出发,选择m个节点,问最多的价值是多小。
思路:很明显是树状dp,遍历树时背包最优价值,dp[i][k]=max{dp[i][r]+dp[son[i]][k-r]}
- #include <iostream>
- #include<cstdio>
- #include<cstring>
- using namespace std;
- #define MAXN 250
- struct node{
- int from,to,next;
- }edge[MAXN];
- int tot,head[MAXN],visit[MAXN],value[MAXN],dp[MAXN][MAXN],f[MAXN][MAXN];
- int n,m;
- void add(int a,int b){//链式向前星
- edge[tot].from=a;
- edge[tot].to=b;
- edge[tot].next=head[a];
- head[a]=tot++;
- }
- void dfs(int root){
- int i,j,u,k;
- visit[root]=1;
- for(i=head[root];i!=-1;i=edge[i].next){
- u=edge[i].to;
- if(!visit[u]){
- dfs(u);//访问下一个节点
- for(k=m;k>=0;k--){//可以选择m个节点
- for(j=0;j<=k;j++){
- f[root][k]=max(f[root][k],f[root][k-j]+dp[u][j]);//背包子节点的价值
- }
- }
- }
- }
- for(j=1;j<=m+1;j++)
- dp[root][j]=f[root][j-1]+value[root];//加上自己节点的价值
- }
- int main(int argc, char** argv) {
- int i,a,b;
- while(scanf("%d%d",&n,&m)!=EOF,n+m){
- tot=0;
- memset(head,-1,sizeof(head));
- for(i=1;i<=n;i++){//从节点1开始,保留节点0为根节点
- scanf("%d%d",&a,&b);
- add(a,i);//单向
- value[i]=b;
- }
- value[0]=0;//0为根节点,价值为零
- memset(visit,0,sizeof(visit));
- memset(dp,0,sizeof(dp));
- memset(f,0,sizeof(f));
- dfs(0);//从0开始遍历树
- printf("%d\n",dp[0][m+1]);
- }
- return 0;
- }
hdu 1561 The more, The Better_树状dp的更多相关文章
- hdu 5869 区间不同GCD个数(树状数组)
Different GCD Subarray Query Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K ( ...
- hdu 6203 ping ping ping(LCA+树状数组)
hdu 6203 ping ping ping(LCA+树状数组) 题意:给一棵树,有m条路径,问至少删除多少个点使得这些路径都不连通 \(1 <= n <= 1e4\) \(1 < ...
- HDU 4714 Tree2cycle(树状DP)(2013 ACM/ICPC Asia Regional Online ―― Warmup)
Description A tree with N nodes and N-1 edges is given. To connect or disconnect one edge, we need 1 ...
- 树状DP HDU1520 Anniversary party
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1520 题意:职员之间有上下级关系,每个职员有自己的happy值,越高在派对上就越能炒热气氛.但是必须是 ...
- 树状DP (poj 2342)
题目:Anniversary party 题意:给出N各节点的快乐指数,以及父子关系,求最大快乐指数和(没人职员愿意跟直接上司一起玩): 思路:从底向上的树状DP: 第一种情况:第i个员工不参与,F[ ...
- poj3659树状DP
Cell Phone Network Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6273 Accepted: 225 ...
- poj 2342 Anniversary party_经典树状dp
题意:Ural大学有n个职员,1~N编号,他们有从属关系,就是说他们关系就像一棵树,父节点就是子节点的直接上司,每个职员有一个快乐指数,现在要开会,职员和职员的直接上司不能同时开会,问怎才能使开会的快 ...
- [Codeforces743D][luogu CF743D]Chloe and pleasant prizes[树状DP入门][毒瘤数据]
这个题的数据真的很毒瘤,身为一个交了8遍的蒟蒻的呐喊(嘤嘤嘤) 个人认为作为一个树状DP的入门题十分合适,同时建议做完这个题之后再去做一下这个题 选课 同时在这里挂一个选取节点型树形DP的状态转移方程 ...
- poj2486--Apple Tree(树状dp)
Apple Tree Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7789 Accepted: 2606 Descri ...
随机推荐
- Linux一个简单的读写文件
(1)linux中的文件描述符fd的合法范围是或者一个正正数,不可能是一个负数. (2)open返回的fd程序必须记录好,以后向这个文件的所有操作都要靠这个fd去对应这个文件,最后关闭文件时也需要fd ...
- c语言typedef之数组运用
#include <stdio.h> #include <stdlib.h> typedef ];//int arr[4]取一个别名 arr b c就是int b[4] int ...
- StretchDIBits使用方法
转自:http://blog.csdn.net/giantchen547792075/article/details/6996011 StretchDIBits 函数把DIB.JPEG.PNG图像中一 ...
- DotNet加密方式解析--散列加密
没时间扯淡类,赶紧上车吧. 在现代社会中,信息安全对于每一个人都是至关重要的,例如我们的银行账户安全.支付宝和微信账户安全.以及邮箱等等,说到信息安全,那就必须得提到加密技术,至于加密的一些相关概念, ...
- samba服务器详细配置(非域模式)
组成Samba运行的有两个服务,一个是SMB,另一个是NMB:SMB是Samba 的核心启动服务,主要负责建立Samba服务器与Samba客户机之间的对话,验证用户身份并提供对文件和打印系统的访问,只 ...
- 关闭程序 提示 C#
private void Form1_FormClosing(object sender, FormClosingEventArgs e) { DialogResult dr = MessageBox ...
- 分享一个在线制作GIF格式loading图片的好网址
等待您寻找惊喜:http://preloaders.net/
- Wireshark 使用教程
原文出处 http://blog.sina.com.cn/s/blog_5d527ff00100dwph.html Wireshark是世界上最流行的网络分析工具.这个强大的工具可以捕捉网络中的数 ...
- iOS 8以上的设置的跳转
iOS8以上的系统应用可以与设置进行深层的交互,用户可以根据APP的需要进行对应的权限的设置. 现在大多数的APP依旧仅仅是弹出一个包含操作指令的警示窗口,如“进入设置>隐私>位置> ...
- UVA 10790 How Many Points of Intersection?
How Many Points of Intersection? We have two rows. There are a dots on the top row and b dots on ...