HDU 1011 Starship Troopers 树形+背包dp
http://acm.hdu.edu.cn/showproblem.php?pid=1011
1 for(int k=m;k>=bu[x];k--){ 2 for(int j=1;j+k<=m;j++){//注意这个地方从1开始 3 f[x][k+j]=max(f[x][k+j],f[x][k]+f[y][j]); 4 } 5 }
View Code
j从1开始循环完美避免了不给下面的路分配人却得到brain值的事情发生,然后就可以ac了。。。
但是并没有ac。。为什么呢。。。因为我,没有把写好的清空数据函数放到主程序里。。。
1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #include<algorithm> 5 #include<cmath> 6 using namespace std; 7 const int maxn=110; 8 const double eps=1e-8; 9 const int modn=45989; 10 int n,m; 11 struct nod{ 12 int next,y; 13 }e[maxn*2]; 14 int bu[maxn]={},bra[maxn]={},head[maxn]={},tot=0; 15 bool vis[maxn]={}; 16 int f[maxn][maxn]={}; 17 void init(int x,int y){ 18 e[++tot].y=y; 19 e[tot].next=head[x]; 20 head[x]=tot; 21 } 22 void dfs(int x){ 23 vis[x]=1; 24 int y; 25 for(int i=bu[x];i<=m;i++){ 26 f[x][i]=bra[x]; 27 } 28 for(int i=head[x];i;i=e[i].next){ 29 y=e[i].y; 30 if(!vis[y]){ 31 dfs(y); 32 for(int k=m;k>=bu[x];k--){ 33 for(int j=1;j+k<=m;j++){ 34 f[x][k+j]=max(f[x][k+j],f[x][k]+f[y][j]); 35 } 36 } 37 } 38 } 39 } 40 void yu(){ 41 tot=0;memset(f,0,sizeof(f)); 42 memset(head,0,sizeof(head)); 43 memset(vis,0,sizeof(vis)); 44 } 45 int main(){ 46 for(;;){ 47 yu(); 48 scanf("%d%d",&n,&m); 49 if(n==-1||m==-1){ 50 break; 51 } 52 for(int i=1;i<=n;i++){ 53 scanf("%d%d",&bu[i],&bra[i]); 54 bu[i]=(bu[i]+19)/20; 55 } 56 int x,y; 57 for(int i=1;i<n;i++){ 58 scanf("%d%d",&x,&y); 59 init(x,y);init(y,x); 60 } 61 if(m==0){ 62 printf("0\n"); 63 continue; 64 } 65 dfs(1); 66 printf("%d\n",f[1][m]); 67 } 68 return 0; 69 }
View Code
转载于:https://www.cnblogs.com/137shoebills/p/7786505.html
HDU 1011 Starship Troopers 树形+背包dp相关推荐
- 树形DP——HDU 1011 Starship Troopers
HDU 1011 Starship Troopers 题目 http://acm.hdu.edu.cn/showproblem.php?pid=1011 作为星河战队的领导者,你被派去摧毁这些虫子的基 ...
- hdu 1011 Starship Troopers (树形背包dp)
本文出自 http://blog.csdn.net/shuangde800 题目链接 : hdu-1011 题意 有n个洞穴编号为1-n,洞穴间有通道,形成了一个n-1条边的树, 洞穴的入口即根节 ...
- HDU 1011 Starship Troopers星河战队(树形dp)
题意 有n个洞穴编号为1-n,洞穴间有通道,形成了一个n-1条边的树, 洞穴的入口即根节点是1. 每个洞穴有x只bugs,并有价值y的金子,全部消灭完一个洞穴的虫子,就可以获得这个洞穴的y个金子. 现 ...
- 【bzoj4007】[JLOI2015]战争调度 暴力+树形背包dp
题目描述 给你一棵 $n$ 层的完全二叉树,每个节点可以染黑白两种颜色.对于每个叶子节点及其某个祖先节点,如果它们均为黑色则有一个贡献值,如果均为白色则有另一个贡献值.要求黑色的叶子节点数目不超过 $ ...
- 【bzoj4753】[Jsoi2016]最佳团体 分数规划+树形背包dp
题目描述 JSOI信息学代表队一共有N名候选人,这些候选人从1到N编号.方便起见,JYY的编号是0号.每个候选人都由一位编号比他小的候选人Ri推荐.如果Ri=0则说明这个候选人是JYY自己看上的.为了 ...
- 【bzoj5072】[Lydsy十月月赛]小A的树 树形背包dp
题目描述 给出一棵n个点的树,每个点有黑白两种颜色.q次询问,每次询问给出x和y,问能否选出一个x个点的联通子图,使得其中黑点数目为y. 输入 第一行一个正整数 T 表示数据组数. 对于每一组数据,第 ...
- HDU-4044 树形背包dp好题
不会做,题解是参考网上的.感觉这道题是到好题,使得我对树形背包dp更了解了. 有几个注意的点,直接给出代码,题解以及注意点都在注释里了. #include<bits/stdc++.h> u ...
- HDU Starship Troopers (树形DP)
Starship Troopers Time Limit : 10000/5000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) ...
- HDU 1011(星河战队 树形DP)
题意是说在一个洞穴中有许多房间,每个房间中有一些虫子和大脑,这些房间之间用隧道相连形成一棵树,士兵们杀虫子的能力有限,也可以直接杀死虫子而不消耗士兵战斗力,但这样就无法得到房间中的大脑,士兵们不能走回 ...
最新文章
- 【超越EfficientNet】无需注意力,Transformer结合视觉任务实现新SOTA
- python 难度-Python分析 oj 网的题目难度和通过率的关系
- ORACLE内存结构简介
- Java中super函数的用法
- 快速上手Arduino -- 打印超声波模块测距信息到OLED屏幕上
- htaccess 防止盗链,防止目录浏览等10大技巧
- 转:靠谱的代码和DRY
- python导入模块以及类_python—模块导入和类
- 后宫宛如传服务器维护,合服丨《后宫宛如传》合服公告
- hello world! 这是我在博客园的第一个博客!
- 贝加莱plc用c语言,贝加莱PLC快速入门.pdf
- Ruff自主研发的NB-IoT智能网关获得联通实验室测试通过
- ToB和ToC端产品分别指什么
- 面部捕捉技术_一种基于面部捕捉系统的捕捉点定位系统的制作方法
- 泰坦尼克号生命值预测
- android ftp播放器,超强本地播放器一款支持samba、FTP/Windows共享服务-简单不折腾...
- 关于一斤酒到底有几两的说明
- 【信奥题库 NOIP 2020 在线模拟赛 T4】三元组
- EXCEL2016学生表两列名字按相同排序,对比期中期末考试选出进步学生
- Altium Designer系列: DRC规则英文对照
热门文章
- [转]Spring数据库读写分离
- 编译:ffmpeg,精简ffmpeg.exe
- ThinkPHP 3.2版本 , 无法读取$_SESSION['verify_code']
- C#根据网址生成静态页面
- [C++程序设计]字符数组的赋值与引用
- 20140418--第1讲.开山篇
- hadoop Shuffle Error: Exceeded MAX_FAILED_UNIQUE_FETCHES; bailing-out
- NeurIPS2021 MBT:多模态数据怎么融合?谷歌提出基于注意力瓶颈的方法,简单高效还省计算量...
- CVPR2021 Oral | HOTR:不再需要后处理!Kakao Brain提出端到端Human-Object交互检测模型...
- 深度学习人体姿态估计:2014-2020全面调研