Starship Troopers(HDU 1011 树形DP)
题意:
给定n个定点和m个士兵,n个定点最终构成一棵树,每个定点有一定x个bugs和y个value,每20个bug需要消耗一个士兵,不足20也消耗一个,然后最终收获y个value,只有父节点被占领后子节点才有被占领的可能。
DP状态转移方程:
dp[p][j]=max(dp[p][j],dp[p][j-k]+dp[t][k]);
看的王大神的代码,DFS写的,先从叶子节点开始向上遍历进行动态规划,自己看了dp方程也没写出来。。
1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 #include <vector> 5 #include <algorithm> 6 using namespace std; 7 #define Max 102 8 struct node 9 { 10 int bugs,val; 11 }cav[Max]; 12 vector<int> node[Max]; 13 int n,m; 14 int vis[Max],dp[Max][Max]; 15 int a,b; 16 void dfs(int p) 17 { 18 int i,j,k; 19 vis[p]=1; 20 int temp=(cav[p].bugs+19)/20; 21 for(i=temp;i<=m;i++) 22 dp[p][i]=cav[p].val; 23 for(i=0;i<node[p].size();i++) 24 { 25 int t=node[p][i]; 26 if(vis[t]) 27 continue; 28 dfs(t); 29 for(j=m;j>=temp;j--) //回溯时完成对该点的动态规划 30 for(k=1;k<=j-temp;k++) 31 dp[p][j]=max(dp[p][j],dp[p][j-k]+dp[t][k]); //保证父节点能够占领 32 } 33 return; 34 } 35 int main() 36 { 37 int i,j; 38 freopen("in.txt","r",stdin); 39 while(scanf("%d%d",&n,&m)!=EOF) 40 { 41 if(n==-1&&m==-1) 42 break; 43 memset(vis,0,sizeof(vis)); 44 memset(dp,0,sizeof(dp)); 45 for(i=0;i<=n;i++) node[i].clear(); 46 for(i=1;i<=n;i++) 47 scanf("%d%d",&cav[i].bugs,&cav[i].val); 48 for(i=0;i<n-1;i++) 49 { 50 scanf("%d%d",&a,&b); 51 node[a].push_back(b); 52 node[b].push_back(a); 53 } 54 if(m==0) 55 { 56 printf("0\n"); 57 continue; 58 } 59 dfs(1); 60 printf("%d\n",dp[1][m]); 61 } 62 return 0; 63 }
转载于:https://www.cnblogs.com/a1225234/p/5232271.html
Starship Troopers(HDU 1011 树形DP)相关推荐
- hdu 2196 树形dp
[题意]:给出一棵树, 每条边有一个权值 求离每个节点最远的点的权值和 看这篇题解学会的 http://tech.ddvip.com/2013-09/1379006959202653.html 树形 ...
- hdu 1520 树形dp
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1520 #include<cstdio> #include<cstring> # ...
- hdu 5148 树形dp,分组背包
题目: 题目分析: 状态方程: dp[当前节点的标号][当前已经选取的城市数] 设已经选取的城市数是K 初始状态: dp[u][0] = dp[u][1] = 0 , 其他的将值设置为无穷大 树形转移 ...
- hdu 5148Cities 树形dp
//dp[u][k1]=min(dp[u][k1-k2]+dp[v][k2]+edge*k2*(k-k2)) //dp[u][k]表示以u节点为根节点的子树中选k个节点所得的最优解 #include& ...
- 树形DP——HDU 1011 Starship Troopers
HDU 1011 Starship Troopers 题目 http://acm.hdu.edu.cn/showproblem.php?pid=1011 作为星河战队的领导者,你被派去摧毁这些虫子的基 ...
- HDU 1011 Starship Troopers星河战队(树形dp)
题意 有n个洞穴编号为1-n,洞穴间有通道,形成了一个n-1条边的树, 洞穴的入口即根节点是1. 每个洞穴有x只bugs,并有价值y的金子,全部消灭完一个洞穴的虫子,就可以获得这个洞穴的y个金子. 现 ...
- HDU Starship Troopers (树形DP)
Starship Troopers Time Limit : 10000/5000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) ...
- hdu 1520 Anniversary party(第一道树形dp)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1520 Anniversary party Time Limit: 2000/1000 MS (Java ...
- fwt优化+树形DP HDU 5909
1 //fwt优化+树形DP HDU 5909 2 //见官方题解 3 // BestCoder Round #88 http://bestcoder.hdu.edu.cn/ 4 5 #include ...
最新文章
- Web服务器和应用程序服务器有什么区别
- WCF+Silverlight部署本机备忘
- 如何成为一名专家级的开发人员
- 参数估计:最大似然、贝叶斯与最大后验
- go 项目 cmd目录_Golang 项目布局浅析
- linux下环境变量PATH的用法
- Verilog HDL中阻塞语句和非阻塞语句的区别
- 尝试使用Microsoft IE 7.0 Beta 1
- 【OO学习】OO第二单元作业总结
- [转载] [转载] python反三角函数arctan_Python numpy.arctan() 使用实例
- 【分享用于学习C++图像处理的代码示例】框架
- c语言求信源的信息熵,第二章-信源与信息熵(三)
- c语言mppt例子,mppt太阳能控制器电路原理
- 算法图解————K 近邻算法
- 计算机硬盘小影响,系统C盘容量太小有哪些危害?又要如何扩容呢?今天再说一遍!...
- 机械硬盘4k读写速度_极速鲨课堂43:机械硬盘秒变固态靠谱吗?
- 在 Ubuntu 18.04 下安装 Klee 2.2
- 预备篇 I :范畴与函子
- 【stm32】ADC的规则通道和注入通道混合使用
- pyspider创建淘女郎图片爬虫任务-运行流程解析
热门文章
- 白帽子讲Web安全(对看书之后的一点笔记)
- UnityGI2:Lightmaps
- Unity3D之UGUI基础7:Scrollbar卷动条
- 链表+启发式合并(bzoj 1483: [HNOI2009]梦幻布丁)
- 一篇让你看懂卷积神经网络
- airflow部署和使用示例
- java中生成pdf,插入图片,页眉、页脚、表格
- caffe将图像数据转换成lmdb文件
- LaTex中“图片引用失败,显示(??)”的解决办法
- 贺利坚老师汇编课程47笔记:jmp short和jmp near ptr和jmp far ptr