日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

HDU 1561 The more ,The Better

發布時間:2025/3/16 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HDU 1561 The more ,The Better 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

The more, The Better

Time Limit: 6000/2000 MS (Java/Others)????Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 4960????Accepted Submission(s): 2927


Problem Description ACboy很喜歡玩一種戰略游戲,在一個地圖上,有N座城堡,每座城堡都有一定的寶物,在每次游戲中ACboy允許攻克M個城堡并獲得里面的寶物。但由于地理位置原因,有些城堡不能直接攻克,要攻克這些城堡必須先攻克其他某一個特定的城堡。你能幫ACboy算出要獲得盡量多的寶物應該攻克哪M個城堡嗎?

Input 每個測試實例首先包括2個整數,N,M.(1 <= M <= N <= 200);在接下來的N行里,每行包括2個整數,a,b. 在第 i 行,a 代表要攻克第 i 個城堡必須先攻克第 a 個城堡,如果 a = 0 則代表可以直接攻克第 i 個城堡。b 代表第 i 個城堡的寶物數量, b >= 0。當N = 0, M = 0輸入結束。
Output 對于每個測試實例,輸出一個整數,代表ACboy攻克M個城堡所獲得的最多寶物的數量。
Sample Input 3 2 0 1 0 2 0 3 7 4 2 2 0 1 0 4 2 1 7 1 7 6 2 2 0 0
Sample Output 5 13樹型DP+背包問題!AC碼:#include<iostream> #include<cstdio> #include<cstring> #include<vector> using namespace std; #define MAX 205 vector<int> adj[MAX]; int f[MAX][MAX],tot[MAX],weight[MAX]; int m; int max(int a,int b) {return a>b?a:b; } int DFS(int u) {tot[u]=1;f[u][1]=weight[u];int i,j,k,v;for(i=0;i<adj[u].size();i++){v=adj[u][i];tot[u]+=DFS(v);}for(i=0;i<adj[u].size();i++){v=adj[u][i];for(j=tot[u];j>=1;j--){for(k=1;k<j&&k<=tot[v];k++)f[u][j]=max(f[u][j],f[u][j-k]+f[v][k]);}}return tot[u]; } int main() {int n,i,u;while(~scanf("%d%d",&n,&m)&&(n+m)){for(i=0;i<=n;i++)adj[i].clear();for(i=1;i<=n;i++){scanf("%d%d",&u,&weight[i]);adj[u].push_back(i);}memset(f,0,sizeof(f));m++;DFS(0);printf("%d\n",f[0][m]);}return 0; }

總結

以上是生活随笔為你收集整理的HDU 1561 The more ,The Better的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。