金明今天很開心,家裡購置的新房就要領鑰匙了,新房裡有一間金明自己專用的很寬敞的房間。
更讓他高興的是,媽媽昨天對他說:「你的房間需要購買哪些物品,怎麼布置,你說了算,只要不
超過 n 元錢就行」。今天一早,金明就開始做預算了,他把想買的物品分為兩類:主件與附件,附件是從屬於某個主件的,下表就是一些主件與附件的例子:
如果要買歸類為附件的物品,必須先買該附件所屬的主件。每個主件可以有 0 個、1 個或 2個附件。附件不再有從屬於自己的附件。金明想買的東西很多,肯定會超過媽媽限定的 n 元。於是,
他把每件物品規定了乙個重要度,分為 5 等:用整數 1~5 表示,第 5 等最重要。他還從網際網路上查到了每件物品的**(都是 10 元的整數倍)。他希望在不超過 n 元(可以等於 n 元)的前提下,使每件物品的**與重要度的乘積的總和最大。
設第 j 件物品的**為 v[j],重要度為 w[j],共選中了 k 件物品,編號依次為 j1,j2,„„,jk,則所求的總和為:
v[j1]*w[j1]+v[j2]*w[j2]+ „+v[jk]*w[jk]。(其中*為乘號)
請你幫助金明設計乙個滿足要求的購物單。
輸入檔案 budget.in 的第 1 行,為兩個正整數,用乙個空格隔開:
n m(其中 n(<32000)表示總錢數,m(<60)為希望購買物品的個數。)
從第 2 行到第 m+1 行,第 j 行給出了編號為 j-1 的物品的基本資料,每行有 3 個非負整數v p q(其中 v 表示該物品的**(v<10000),p 表示該物品重要度(1~5),q 表示該物品是主件還是附件。如果 q=0,表示該物品為主件,如果 q>0,表示該物品為附件,q 是所屬主件的編號)
** 輸出檔案 budget.out 只有乙個正整數,為不超過總錢數的物品的**與重要度乘積的總和的最大值(<200000)。
** budget.in budget.out
** 1000 5 2200
800 2 0
400 5 1
300 5 1
400 3 0
500 2 0
** 樹形dp運算量太大
orz這裡
還orz這裡
神犇在我就不bibi惹……
#include
#include
using namespace std;
const int maxn=61;
int n,m,mx=0;
int a,b,q;
int v[maxn],v1[maxn],v2[maxn];
int p[maxn],p1[maxn],p2[maxn];
int f[50001];
int main()
else
}else
}for(int i=1;i<=n;i++)
for(int j=m;j>=v[i];j--)
printf("%d",mx*10);
return
0;}
——既然選擇了遠方,便只顧風雨兼程
有錯誤歡迎各神犇指正~qaq
NOIP2006 金明的預算方案
1 金明的預算方案 問題描述 金明今天很開心,家裡購置的新房就要領鑰匙了,新房裡有一間金明自己專用的很寬敞的房間。更讓他高興的是,媽媽昨天對他說 你的房間需要購買哪些物品,怎麼布置,你說了算,只要不 超過n元錢就行 今天一早,金明就開始做預算了,他把想買的物品分為兩類 主件與附件,附件是從屬於某個主...
NOIP2006 金明的預算方案 揹包DP
樣例輸入 sample input 1000 5 800 2 0 400 5 1 300 5 1 400 3 0 500 2 0 樣例輸出 sample output 2200 並茂2333 不 乙個簡單的01揹包變形。本來我想當挑附件的時候看看能不能挑主件,結果好像不能重複選同乙個主件 所以我們就...
NOIP提高組2006 金明的預算方案
揹包公升級版 附帶從屬關係 因為從屬關係很少 所以強行把兒子綁在爸爸上dp 故必須dp倆維 dp 局數 代價 把兒子方案們放在同一局,由上一局轉移,使其不能相互影響 include include include include include include include includeusin...