程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> 關於C >> 【hdu5534】【2015ACM/ICPC亞洲區長春站】Partial Tree 題意&題解&代碼

【hdu5534】【2015ACM/ICPC亞洲區長春站】Partial Tree 題意&題解&代碼

編輯:關於C

題意:
構造一棵有n個節點的數,f[i]表示度數(入度+出度)為i的節點的點權,給出所有的f[i],問這棵樹最大點權。
題解:
一道dp題,思維很巧妙
一共有n個點則總度數為2×(n-1),首先每個點至少也要一度則將這確定的一度先分配到每個點上,接下來還剩下n-2度沒有分配,因為度數是任意分配的,接下來我們可以把問題看做將n-2度分配任意多個n-2度,n-3度,n-4度…………1度使得分配完後權值最大,這樣看來,這不就是個完全背包麼,果然我dp學的還是差。
代碼:

#include
#include
#include
#include
using namespace std;
int n,T,f[2020],dp[4050];
int main()
{
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d",&n);
        for (int i=1;i=0)
            dp[j]=max(dp[j],dp[j-i]+f[i+1]);
        }
        cout<
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved