HDU-5534 Partial Tree 完全背包 设定初始选择
题目链接:https://cn.vjudge.net/problem/HDU-5534
题意
放学路上看到n个节点,突然想把这几个节点连成一颗树。
树上每个节点有一个清凉度,清凉度是一个关于节点度的函数。
问能够组成树的最大清凉度是多少。
思路
看到题目瞬间考虑一共有n-1条边,各节点的度之和是2n-2。
那么猜测每个节点上分配度数是一个完全背包。
画了两个例子结果是没问题。
注意可能有的节点将不被分配度数,所以要预分配一个度
dp[0]=n*val[1]
这样做的原理是每个节点必然可以分配到一个度,而每次更新度数时必然可以替换掉一个初始度数。
所以最终的答案应该是每个节点都有度数。
- 预分配dp[0]=n*val[1];并且因为必须从0开始(填满背包),所以其他dp[i]=-INF保证取不了
- 注意预分配后,每个节点的度变为1,所以再更新节点时把节点代价减1,背包大小减n
提交过程
| AC | 一开始没有初始分配度数,最后看了题解才懂得 |
代码
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn=2015+20, INF=1e8;
int dp[maxn], val[maxn], n;
int main(void){
int T;
scanf("%d", &T);
while (T--){
scanf("%d", &n);
for (int i=1; i<=n-1; i++) scanf("%d", &val[i]);
for (int i=1; i<=n-1; i++) dp[i]=-INF;
dp[0]=n*val[1];
for (int i=2; i<=n-1; i++){
for (int j=i-1; j<=n-2; j++) // attend: i-1
dp[j]=max(dp[j], dp[j-i+1]+val[i]-val[1]);
}
printf("%d\n", dp[n-2]);
}
return 0;
}
| Time | Memory | Length | Lang | Submitted |
|---|---|---|---|---|
| 62ms | 1228kB | 578 | G++ | 2018-08-21 03:47:13 |
HDU-5534 Partial Tree 完全背包 设定初始选择的更多相关文章
- HDU 5534 Partial Tree 完全背包
一棵树一共有2*(n-1)度,现在的任务就是将这些度分配到n个节点,使这n个节点的权值和最大. 思路:因为这是一棵树,所以每个节点的度数都是大于1的,所以事先给每个节点分配一度,答案 ans=f[1] ...
- HDU 5534 Partial Tree (完全背包变形)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5534 题意: 给你度为1 ~ n - 1节点的权值,让你构造一棵树,使其权值和最大. 思路: 一棵树上 ...
- hdu 5534 Partial Tree 背包DP
Partial Tree Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid= ...
- HDU - 5534 Partial Tree(每种都装的完全背包)
Partial Tree In mathematics, and more specifically in graph theory, a tree is an undirected graph in ...
- 2015ACM/ICPC亚洲区长春站 H hdu 5534 Partial Tree
Partial Tree Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)To ...
- hdu 5534 Partial Tree(完全背包)
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=5534 题解:这题一看有点像树形dp但是树形dp显然没什么思路.然后由于这里的约束几乎没有就 ...
- ACM学习历程—HDU 5534 Partial Tree(动态规划)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5534 题目大意是给了n个结点,让后让构成一个树,假设每个节点的度为r1, r2, ...rn,求f(x ...
- 2015长春 HDU 5534 Partial Tree
题意:有n个结点,n-1条边,现在要把这n个结点连成一棵树,给定了f(i),表示度为i的结点的价值是f(i).现在问如何连能够使得Σf(i)的值最大. 思路:每个点至少一个度,所以可分配的度数为n-2 ...
- HDU 5534 Partial Tree
2015 ACM/ICPC 长春现场赛 H题 完全背包 #include<cstdio> #include<cstring> #include<cmath> #in ...
随机推荐
- 30 包含min函数的栈(举例让抽象问题具体化)
题目描述: 定义栈的数据结构(push/pop),请在该类型中实现一个能够得到栈中所含最小元素的min函数(三者的时间复杂度都应为O(1)). 测试用例: 1)新压入栈的数字比之前的最小值大/小 2) ...
- HDU2149 - Public Sale【巴什博弈】
虽然不想,但是现实总归是现实,Lele始终没有逃过退学的命运,因为他没有拿到奖学金.现在等待他的,就是像FarmJohn一样的农田生涯. 要种田得有田才行,Lele听说街上正在举行一场别开生面的拍卖 ...
- Hibernate Session操作
1.增加 @Test public void add(){ Configuration cfg=new Configuration().configure(); SessionFactory fact ...
- http格式(graph)
http请求格式 http请求头 字段 http响应 http响应头字段
- [Android]RecyclerView的简单演示样例
去年google的IO上就展示了一个新的ListView.它就是RecyclerView. 下面是官方的说明,我英语能力有限,只是我大概这么理解:RecyclerView会比ListView更具有拓展 ...
- IT关键词,面试知识问与答
二叉树遍历的三种方式? 遍历是指依次访问⼆叉树中的每个元素.有三种遍历⽅法,分别是前序遍历. 中序遍历和后序遍历.它们是按照访问根节点和⼦节点的先后顺序命名的. • 前序遍历:先访问根节点,然后访问左 ...
- 信息安全-加密:SM4.0
ylbtech-信息安全-加密:SM4.0 SM4.0(原名SMS4.0)是中华人民共和国政府采用的一种分组密码标准,由国家密码管理局于2012年3月21日发布.相关标准为“GM/T 0002-201 ...
- c++面向对象程序设计 谭浩强 第二章答案
类体内定义成员函数 #include <iostream> using namespace std; class Time { public: void set_time(); void ...
- Binary Indexed Tree 总结
特点 1. 针对 数组连续子序列累加和 问题(需要进行频繁的 update.sum 操作): 2. 并非是树型结构,只是逻辑上层次分明: 3. 可以通过 填坑法 来理解: 4. 中心思想:每一个整数都 ...
- ios 中生成随机数
ios 有如下三种随机数方法: 1. srand((unsigned)time(0)); //不加这句每次产生的随机数不变 int i = rand() % 5; 2. s ...