HDU Starship Troopers(树形DP)
来源:互联网 发布:前线seo 编辑:程序博客网 时间:2024/05/18 14:22
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1011
这个题目是在树形DP的基础上在每个节点的一个分组背包问题
首先根据题目条件建立一颗树,然后DFS整棵树,每个节点的dp[i]
表示以这个节点为根,放i个士兵最多能得到brains的个数!
对每个非叶节点进行一次分组背包,最后输出根节点的dp[m]
#include <iostream>#include <string.h>#include <algorithm>#include <stdio.h>#include <vector>using namespace std;#define maxn 110#define MAX(a,b) (a>b?a:b)struct point{ vector<int> child; int dp[maxn]; int v,c;}po[maxn];int n,m;int tree_dp(int root){ if(po[root].child.empty()){ for(int i=po[root].v;i<=m;i++) po[root].dp[i]=po[root].c; return 0; } for(int i=0;i<po[root].child.size();i++){ tree_dp(po[root].child[i]); } for(int i=po[root].v;i<=m;i++) po[root].dp[i]=po[root].c; for(int i=0;i<po[root].child.size();i++){//分组背包,所有的分组,也就是每一个子节点为一组 for(int j=m;j>=po[root].v;j--) for(int k=1;j+k<=m;k++){ po[root].dp[j+k]=MAX(po[root].dp[j+k],po[root].dp[j]+po[po[root].child[i]].dp[k]); } } return 0;}int main(){ int i,j,k,a,b; while(scanf("%d%d",&n,&m)){ if(n==-1 && m==-1) return 0; for(i=0;i<=n;i++) po[i].child.clear(); memset(po,0,sizeof(po)); for(i=1;i<=n;i++){ scanf("%d%d",&po[i].v,&po[i].c); po[i].v=(po[i].v+19)/20; } for(i=1;i<n;i++){ scanf("%d%d",&a,&b); if(a<b) po[a].child.push_back(b); else po[b].child.push_back(a); } if(m==0){ printf("0\n");continue; } tree_dp(1); printf("%d\n",po[1].dp[m]); } return 0;}
- HDU 1001 Starship Troopers(树形DP)
- HDU Starship Troopers(树形DP)
- hdu 1011 Starship Troopers(树形DP)
- hdu 1011 Starship Troopers(树形DP)
- HDU 1011 Starship Troopers(树形DP)
- HDU 1011 Starship Troopers(树形DP)
- HDU-1011 Starship Troopers(树形dp)
- HDU 1011 Starship Troopers (树形DP)
- HDU 1011 Starship Troopers (树形DP)
- 【DP】HDU 1011 Starship Troopers 树形DP
- HDU 1011 Starship Troopers (树形DP+依赖背包)
- hdu 1011 Starship Troopers (树形背包dp)
- HDU 1011 Starship Troopers 树形DP(0-1背包)
- HDU 1011 Starship Troopers(树形dp+背包)
- HDU 1011 Starship Troopers(树形DP/01背包)
- HDU 1011 Starship Troopers(树形DP+01背包)
- hdu 1011 Starship Troopers 树形dp
- hdu 1011 Starship Troopers 树形dp
- Linux系统服务 3 ---- FTP服务原理及vsftpd服务配置
- 解读C指针(4)——指针运算
- 研究了一下关于图片预览的方法
- 15. 转换二叉查找树
- Java基础(五)(IO流,线程)
- HDU Starship Troopers(树形DP)
- U-boot中实现Yaffs2+HwEcc
- 女生写的如何追mm.看完后嫩头青变高手
- 黑马程序员——java面试中常遇到的面试项目——交通灯系统管理项目
- jsp中include指令和标签
- 数组中大于等于左侧所有数,小于等于右侧所有数的数
- Android电话拨打流程源码分析
- 文件读写基础
- H.264简单码流分析