hdu5534 Partial Tree
来源:互联网 发布:java单例模式程序 编辑:程序博客网 时间:2024/05/29 10:49
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)
Total Submission(s): 126 Accepted Submission(s): 68
Total Submission(s): 126 Accepted Submission(s): 68
Problem Description
In mathematics, and more specifically in graph theory, a tree is an undirected graph in which any two nodes are connected by exactly one path. In other words, any connected graph without simple cycles is a tree.
You find a partial tree on the way home. This tree hasn nodes but lacks of n−1 edges. You want to complete this tree by adding n−1 edges. There must be exactly one path between any two nodes after adding. As you know, there are nn−2 ways to complete this tree, and you want to make the completed tree as cool as possible. The coolness of a tree is the sum of coolness of its nodes. The coolness of a node is f(d) , where f is a predefined function and d is the degree of this node. What's the maximum coolness of the completed tree?
You find a partial tree on the way home. This tree has
Input
The first line contains an integer T indicating the total number of test cases.
Each test case starts with an integern in one line,
then one line withn−1 integers f(1),f(2),…,f(n−1) .
1≤T≤2015
2≤n≤2015
0≤f(i)≤10000
There are at most10 test cases with n>100 .
Each test case starts with an integer
then one line with
There are at most
Output
For each test case, please output the maximum coolness of the completed tree in one line.
Sample Input
232 145 1 4
Sample Output
519
注意到一个节点数为n的树的度数和玮2*n-2,所以问题就转换为了把2*n-2个度分配给n个节点所能获得的最大价值,而且每一个节点至少分到1个度。我们可以先每一个分一个度,然后把n-2个节点任意分配完。分配的时候因为已经分了1个度了,所以要把2~n-1的度看为1~n-1,然后做个完全背包就行了。
#include<iostream>#include<stdio.h>#include<stdlib.h>#include<string.h>#include<math.h>#include<vector>#include<map>#include<set>#include<queue>#include<stack>#include<string>#include<algorithm>using namespace std;typedef long long ll;#define inf 99999999int v[2200],dp[2200];int main(){ int n,m,i,j,T; scanf("%d",&T); while(T--) { scanf("%d",&n); for(i=1;i<=n-1;i++){ scanf("%d",&v[i]); } int ans=0; ans+=v[1]*n; for(i=2;i<=n-1;i++){ v[i]-=v[1]; } for(i=1;i<=n-2;i++){ dp[i]=-inf; } dp[0]=0; for(i=1;i<=n-2;i++){ v[i]=v[i+1]; } for(i=1;i<=n-2;i++){ for(j=i;j<=n-2;j++){ dp[j]=max(dp[j],dp[j-i]+v[i]); } } ans+=dp[n-2]; printf("%d\n",ans); }}
0 0
- hdu5534 Partial Tree
- hdu5534 Partial Tree
- hdu5534 Partial Tree
- hdu5534 Partial Tree
- hdu5534 Partial Tree(dp)
- HDU5534 Partial Tree 【DP】
- HDU5534 Partial Tree
- hdu5534 Partial Tree 完全背包
- HDU5534--Partial Tree (完全背包)
- hdu5534 Partial Tree (巧妙转为完全背包)
- HDU5534 Partial Tree(15年亚洲区长春站) DP
- 【hdu5534】【2015ACM/ICPC亚洲区长春站】Partial Tree 题意&题解&代码
- 【HDU5534 2015长春赛区H】【树上DP转完全背包】Partial Tree 不同度不同权对应最大树权
- hdu5534
- hdu 5534 Partial Tree
- HDU 5534 Partial Tree
- hdu 5534 Partial Tree
- HDU-5534-Partial Tree
- Java语言基础之接口
- 编程学习小笔记
- 第十周项目(3):利用二叉树遍历思想解决问题(1)计算二叉树的节点个数
- 8.11.2 Table Locking Issues 表锁执行
- yii2.0 集成七牛php sdk
- hdu5534 Partial Tree
- Linux常用命令
- JS 实现汉字转拼音
- 推荐4个Android引导页控件
- 调试中手机抓包工具的使用
- OpenSSL生成证书
- 第十周--【项目1 - 二叉树算法库】
- 三个文件每行去重且保持原序叠加
- 使用CocoaPods进行第三方资源管理