題目連線
題目大意:在01揹包問題上的乙個小小變形,每個物品分為主件和附件,要買附件必須擁有它的主件,每次主件最多擁有2個附件。
樣例:
1000(你有的錢) 5(物品的數量)
n個物品
物品的單價 物品的價值 物品是不是附件 0是主件 非0 是幾就是第幾個物品的附件
800 2 0
400 5 1
300 5 1
400 3 0
500 2 0
輸出 2200
求不超過總錢數的物品的**與價值乘積的總和的最大值
感覺題解寫的超棒!
copy一下:
帶有附件的揹包問題,它屬於01揹包的變式。
這題還好,每乙個物品最多只有兩個附件,那麼我們在對主件進行揹包的時候,決策就不再是兩個了,而是五個。
還記得01揹包的決策是什麼嗎?
1.不選,然後去考慮下乙個
2.選,揹包容量減掉那個重量,總值加上那個價值。
這個題的決策是五個,分別是:
1.不選,然後去考慮下乙個
2.選且只選這個主件
3.選這個主件,並且選附件1
4.選這個主件,並且選附件2
5.選這個主件,並且選附件1和附件2.
然後就很好寫了
#include
using namespace std;
const int maxn = 30000 + 10;
int dp[maxn], price[maxn], value[maxn], is[maxn];
struct node ;
vector
data[maxn];
int main()
);else
data[u - 1].push_back((node)
); }
for(int i = 0; i < m; i++)
if(data[i].size() == 3)}}
printf("%d\n", dp[n]);
}
P1064 金明的預算方案
原題鏈結 本來是道dp題,我們拿來練搜尋了 雖然最後還是寫了dp 一開始的時候把每個情況都單獨拿出來了變成01揹包 但是有可能出現 選了主件a 選了主件a和附件a1 同時被選中的情況 這樣當然就不符合題意了呀 因為每個主件頂多只有兩個附件所以可以列舉情況直接變成分組揹包 每組裡面只能選乙個 incl...
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。為了簡化起見,我們先設沒有某個物品既依賴於別的物品,又被別的物品所依賴 另外,沒有某件物品同時依賴多件...