zoukankan      html  css  js  c++  java
  • kingdom

    题目链接:https://ac.nowcoder.com/acm/problem/19810


    题意看了好久才明白什么意思_(:з」∠)_
    一开始以为只有最底部的节点需要传递信息,但其实是每个官员都要传递信息。

    比如这个图,红色是国王,蓝色的三个是非重儿子的节点(还有其他节点没画),传递信息的时候,蓝1传给国王花费1,蓝2是蓝1的重儿子,传给蓝1不花费,蓝1再传给国王再花费1,蓝3传给蓝1花费1,再传给国王又花费1。所以这颗蓝色的树一共花费了4.

    我们用一个ans[n]来记录n个节点的最大花费,dp[i][j]记录i个节点中,最大子树不大于j个节点的最大花费。
    如果重儿子的节点为j,那么ans[n]可以由dp[n-j-1][j]+n-j-1+ans[j]得到,所以ans的转移方程就是ans[n]=max(ans[n], dp[n-j-1][j]+n-j-1+ans[j] );
    对于dp[i][j],可以得到:
    dp[i][j]=dp[i-j][j]+ans[j];(i>=j)
    dp[i][j]=dp[i][j-1];(i<j)

    #include <cstdio>
    #include <iostream>
    #include <algorithm>
    #include <cstring>
    #include <string>
    #include <stack>
    #include <queue>
    #include <cmath>
    #define ll long long
    #define pi 3.1415927
    #define inf 0x3f3f3f3f
    #define mod 1000000007
    using namespace std;
    #define _int __int128_t
    inline int read()
    {
        int x=0,f=1;
        char c=getchar();
        while(c<'0'||c>'9') {if(c=='-') f=-1;c=getchar();}
        while(c>='0'&&c<='9') x=(x<<1)+(x<<3)+c-'0',c=getchar();
        return f*x;
    }
    void print(int x)
    {
        if(x < 0) {putchar('-');x = -x;}
        if(x/10) print(x/10);
        putchar(x%10+'0');
    }
    int n,m,dp[10000][10000],ans[10000];
    int main ()
    {
        int T,i,t,j,k,p,sum=0;
        cin>>n;
        for(i=1;i<=n;++i){
            for(j=1;j<i;++j){
                ans[i]=max(ans[i],dp[i-j-1][j]+i-j-1+ans[j]);
            }
            for(j=1;j<=n;++j)
            {
                if(i>=j)
                    dp[i][j]=dp[i-j][j]+ans[j];
                else
                    dp[i][j]=dp[i][j-1];
            }
        }
        cout<<ans[n]<<endl;
        return 0;
    }
  • 相关阅读:
    【搜索好题】bzoj1501 [NOI2005]智慧珠游戏
    bzoj1854 [Scoi2010]游戏 ([SCOI2010]连续攻击游戏)
    bzoj1412 [ZJOI2009]狼和羊的故事
    LeetCode(22)Generate Parentheses
    LeetCode(11) Container With Most Water
    VS2013环境下Boost库配置
    LeetCode(87) Gray Code
    LeetCode(86) Partition List
    LeetCode(82)Remove Duplicates from Sorted List
    LeetCode(81) Search in Rotated Array II
  • 原文地址:https://www.cnblogs.com/blowhail/p/13329320.html
Copyright © 2011-2022 走看看