HDU 5534 Partial Tree (完全背包变形)
2016-10-07 19:48
253 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5534
题意:
给你度为1 ~ n - 1节点的权值,让你构造一棵树,使其权值和最大。
思路:
一棵树上每个节点的度至少为1,且度的和为2*n - 2。那么我们先给这些节点的度都-1,剩下的节点度为n - 2。此时我们发现,任意分配剩下的这些度给节点,都可以形成一棵树。这就变成了一个完全背包题,容量为n-2。注意dp要初始化为-inf。思路确实巧妙。
题意:
给你度为1 ~ n - 1节点的权值,让你构造一棵树,使其权值和最大。
思路:
一棵树上每个节点的度至少为1,且度的和为2*n - 2。那么我们先给这些节点的度都-1,剩下的节点度为n - 2。此时我们发现,任意分配剩下的这些度给节点,都可以形成一棵树。这就变成了一个完全背包题,容量为n-2。注意dp要初始化为-inf。思路确实巧妙。
1 #include <iostream> 2 #include <cstdio> 3 #include <algorithm> 4 #include <cstring> 5 using namespace std; 6 const int N = 2020; 7 int a , inf = 1e8; 8 int dp ; 9 int main() 10 { 11 int t, n; 12 scanf("%d", &t); 13 while(t--) { 14 scanf("%d", &n); 15 for(int i = 1; i <= n - 1; ++i) { 16 scanf("%d", a + i); 17 dp[i] = -inf; 18 } 19 for(int i = 2; i <= n - 1; ++i) { 20 for(int j = 1; j <= n - 2; ++j) { 21 if(j >= i - 1) { 22 dp[j] = max(dp[j], dp[j - i + 1] + a[i] - a[1]); 23 } 24 } 25 } 26 printf("%d\n", dp[n - 2] + n*a[1]); 27 } 28 return 0; 29 }
相关文章推荐
- HDU 5534 Partial Tree (变形完全背包 好题)
- HDU 5534 Partial Tree (完全背包)
- HDU-5534 Partial Tree 完全背包 设定初始选择
- hdu 5534 Partial Tree(完全背包)
- HDU 5534 Partial Tree ACM/ICPC 2015 Changchun(完全背包)
- HDU 5534 Partial Tree(完全背包)
- HDU 5534 Partial Tree(完全背包)
- HDU-5534-Partial Tree【2015长春赛区】【完全背包】
- hdu 5534 Partial Tree(完全背包)
- HDU 5534 Partial Tree 【完全背包+思维】
- hdu 5534 Partial Tree(完全背包)
- hdu 5534 Partial Tree(完全背包)
- HDU 5534 Partial Tree (2015长春站H题&&完全背包)
- HDU 5534 Partial Tree 完全背包
- [HDU 5534] Partial Tree (完全背包问题) (好题)
- HDU-5534-Partial Tree【2015长春赛区】【完全背包】
- HDU 5534 Partial Tree [完全背包]【动态规划+思维】
- hdu 5534 Partial Tree 背包DP
- HDU 5534(Partial Tree-背包)
- hdu5534 完全背包变形