NC11179 D. 牛牛种小树(完全背包)
目录
Description
要求构造一个有 \(n\) 个节点的树,每个度数都有对应的价值,求最大价值
State
\(1<=n<=10^4\)
\(1<=a[i]<=10^9\)
Input
4
5 1 4
Output
19
Solution
一棵树的节点为 \(n\) ,那么他的总度为 \(m=2*n-2\)
这 \(n\) 个节点的总度数恰好为 \(m\), 而且最小度为 \(1\),可以先将每个节点的度置为 \(1\),然后如果某节点的度为 \(x\),其贡献为 \(a[x]-a[1]\)
剩下的 \(n-2\) 个度利用完全背包解决
Code
const int N = 1e4 + 5;
int n, m, _, k;
int a[N];
ll dp[N];
signed main()
{
//IOS;
while(~ sd(n)){
rep(i, 1, n - 1) sd(a[i]);
int m = (n - 1) * 2 - n;
dp[0] = (ll)n * a[1];
for(int i = 2; i < n; i ++){
for(int j = i - 1; j <= m; j ++){
dp[j] = max(dp[j], dp[j - i + 1] + a[i] - a[1]);
}
}
pll(dp[m]);
}
//PAUSE;
return 0;
}

浙公网安备 33010602011771号