原題鏈結
本來是道dp題,我們拿來練搜尋了(:зゝ∠)雖然最後還是寫了dp
一開始的時候把每個情況都單獨拿出來了變成01揹包
但是有可能出現[選了主件a][選了主件a和附件a1]同時被選中的情況
這樣當然就不符合題意了呀☆
因為每個主件頂多只有兩個附件所以可以列舉情況直接變成分組揹包
每組裡面只能選乙個
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std
;struct nico
g[500],k[500];
int n,m,v,p,q,i,j,t,f,rom[400000],p1,l;
int main()
else
}for(i=1
;i<=m;i++)
if(g[i].fc[0]!=0)
if(j==2)
}k[f].d=t;
}for(i=1
;i<=f;i++)
for(j=n;j>=0;j--)
for(l=1
;l<=k[i].d;l++)
if(j>=k[i].fv[l]) rom[j]=max(rom[j],rom[j-k[i].fv[l]]+k[i].fc[l]);
printf("%d",rom[n]);
return 0
;}
P1064 金明的預算方案
金明今天很開心,家裡購置的新房就要領鑰匙了,新房裡有一間金明自己專用的很寬敞的房間。更讓他高興的是,媽媽昨天對他說 你的房間需要購買哪些物品,怎麼布置,你說了算,只要不超過n元錢就行 今天一早,金明就開始做預算了,他把想買的物品分為兩類 主件與附件,附件是從屬於某個主件的,下表就是一些主件與附件的例...
P1064 金明的預算方案
輸入 1000 5 800 2 0 400 5 1 300 5 1 400 3 0 500 2 0 輸出 2200這道題是一道依賴揹包問題,所謂依揹包就是i依賴於j,表示若選物品i,則必須選物品j。為了簡化起見,我們先設沒有某個物品既依賴於別的物品,又被別的物品所依賴 另外,沒有某件物品同時依賴多件...
P1064 金明的預算方案
題目 p1064 金明的預算方案 分析 f i 表示i的錢內能得到的最大價值 g j 表示在選了某個主件下,j的錢內得到的最大價值 則狀態轉移方程為 g i max g i g i a j price a j value 其中j為i的附件 f i max f i g i ac include inc...