牛客国庆集训派对Day6 F - DP

版权声明:欢迎随便转载。 https://blog.csdn.net/a1214034447/article/details/82989056

题目链接:点击这里

解题思路:

g[i]表示i个点不做里面没有重儿子的最大花费值,dp[i]表示i个点的树的最大花费值.

因为每次i从1枚举,所以g[i]的树中,最大树节点数不会超过i.所以可以直接dp

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const double pi = acos(-1);
const int mod = 313;
const int mx = 8005;
int g[mx],dp[mx],n;
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        for(int j=0;j<=n-i;j++){
            g[i+j] = max(g[i+j],g[j] + dp[i]);
            dp[i+j+1] = max(dp[i+j+1],g[j] + dp[i] + j);
        }
    }
    printf("%d\n",dp[n]);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/a1214034447/article/details/82989056