HDOJ-1561(树形DP)
来源:互联网 发布:武汉夏威夷水会漂亮js 编辑:程序博客网 时间:2024/05/22 05:10
一开始感觉这是个森林,怎么DP,突然想到,可以用一个”空“节点作为森林的树根,这个”空“节点没有reward没有cost,其他节点的cost都为1,则状态方程即可写作:f[i][j] = max(f[i][j], f[children[i]][k] + f[i][j-k])
#include <cstdio>#include <vector>#include <algorithm>using namespace std;int N, M;int reward[201] = {0};int gain[201][201] = {0};vector<int> children[201];bool input(){ scanf("%d %d", &N, &M); if(!N) return false;//input for(int i = 0; i <= N; ++i) children[i].clear(); for(int i = 1, pa = 0; i <= N; ++i){ scanf("%d %d", &pa, &reward[i]); children[pa].push_back(i); } return true;}void postDP(int i){ int j, k, n = children[i].size() - 1; for(j = 1; j <= M; ++j) gain[i][j] = reward[i]; for(; n > -1; --n){ int child = children[i][n], cost = !!i;//castle 0 has no cost, others has 1 cost postDP(child); for(j = M; j > cost; --j){ for(k = j - cost; k >= 1; --k){ gain[i][j] = max(gain[i][j], gain[child][k] + gain[i][j-k]); } } }}int main(){ while(input()){ if(children[0].empty()){//no castle has no prerequisite puts("0"); continue; } postDP(0); printf("%d\n", gain[0][M]); } return 0;}
0 0
- HDOJ-1561(树形DP)
- HDOJ-1011(树形DP)
- HDOJ-4276(树形DP+背包DP)
- HDOJ 1561 The more, The Better (树形DP)
- HDOJ (HDU) 1561 The more, The Better (树形DP)
- HDOJ 1561 - 树形DP,泛化背包
- HDOJ 题目4714 Tree2cycle(树形DP)
- HDOJ 1011 树形DP
- hdoj 2196Computer 树形DP
- computer hdoj 2196树形dp
- HDOJ 4705 Y 树形DP
- 【树形DP】 HDOJ 5148 Cities
- HDOJ 1561 The more, The Better(树形DP)
- hdoj - 1520 - Anniversary party(基础树形DP)
- HDOJ 题目1520 Anniversary party(树形dp)
- HDOJ题目4705 Y(简单树形DP+数学)
- hdoj Free DIY Tour 1224 (树形DP记录路径)
- hdu 1561(树形DP)
- document.layers、document.all、document.getElementById区别
- Sip基础一
- 《iOS6 application development》学习之路:No.6:两种实现动画的方法
- yaao video app store
- Android的按钮单击事件及监听器的实现方式
- HDOJ-1561(树形DP)
- Spring+Hibernate框架下MySql读写分离,主从数据库配置
- Jedis、JedisPool、Jedis分布式实例介绍
- 通过CMD来打开一个C#程序,并传入参数
- 两种方式建立Vsftpd虚拟用户
- 平衡二叉树SBT||线段树区间维护poj2892
- UIApplication详解
- 堆
- 1602时钟