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;
}
posted @ 2021-09-30 10:32  Bcoi  阅读(48)  评论(0)    收藏  举报