description
暗黑遊戲中,裝備直接決定玩家人物的能力。可以使用pg和rune購買需要的物品。暗黑市場中的裝備,每件有不同的**(pg和rune)、能力值、最大可購買件數。kid作為暗黑戰網的乙個玩家,當然希望使用盡可能少的pg和rune購買更優的裝備,以獲得最高的能力值。請你幫忙計算出現有支付能力下的最大可以獲得的能力值。
input
第一行,三個整數n,p,r,分別代表市場中物品種類,pg的支付能力和rune的支付能力。
第2..n+1行,每行四個整數,前兩個整數分別為購買此物品需要花費的pg,rune,第三個整數若為0,則說明此物品可以購買無數件,若為其他數字,則為此物品可購買的最多件數(s),第四個整數為該裝備的能力值。
output
僅一行,乙個整數,最大可獲得的能力值。
sample input
3 10 10
5 3 0 1104
3 4 1202
3 1 130
sample output
370
hint
注釋 hint
對於30%的資料, 0
<="s<=8;"
對於70%的資料, 0
<="s<=16;"
對於100%的資料, 0
<="s<=32;"
選第二種裝備2件和第三種裝備1件。
<="s<=8;"
<="s<=16;"
<="s<=32;"
<="s<=8;"
<="s<=16;"
<="s<=32;"
<="s<=8;"
<="s<=16;"
<="s<=32;"
解題思路:
這其實是乙個混合揹包。
f[j,k]表示一定種類物品在容量限制①為j且容量限制②為k的揹包裡的最大價值,根據題意分別處理,迴圈為:1<=i<=n
若是完全揹包,狀態轉移方程為:
f[j,k]=max
(w1[i]<=j<=m1,w2[i]<=k<=m2)
若是多重揹包,狀態轉移方程為:
f[k,l]=max
(1<=j<=s[i],m1>=k>=w1[i],m2>=l>=w2[i])
f[m1,m2]即為所求。
時間複雜度:
o(n*(m1*m2+s[i]*w1[i]*w2[i])
程式:var
f:array[0..1000,0..1000]of longint;
w1,w2,v,s:array[0..1000]of longint;
n,m1,m2,i,j,k,l:longint;
function max(a,b:longint):longint;
begin
if a>b then exit(a)
else exit(b);
end;
begin
readln(n,m1,m2);
for i:=1 to n do
readln(w1[i],w2[i],s[i],v[i]);
for i:=1 to n do
if s[i]=0 then
for j:=w1[i] to m1 do
for k:=w2[i] to m2 do
f[j,k]:=max(f[j-w1[i],k-w2[i]]+v[i],f[j,k])
else
for j:=1 to s[i] do
for k:=m1 downto w1[i] do
for l:=m2 downto w2[i] do
f[k,l]:=max(f[k-w1[i],l-w2[i]]+v[i],f[k,l]);
writeln(f[m1,m2]);
end.
版權屬於: chris
暗黑破壞神(動態規劃)
description 無聊中的小x玩起了diablo i.遊戲的主人公有n個魔法 每個魔法分為若干個等級,第i個魔法有p i 個等級 不包括0 每個魔法的每個等級都有乙個效果值,乙個j級的i種魔法的效果值為w i j 魔法公升一級需要一本相應的魔法書 購買魔法書需要金幣,第i個魔法的魔法書 為c ...
暗黑遊戲(正解)
這是一道使用多重揹包的題 其實還是挺簡單的 哈哈哈哈哈哈哈 描述暗黑遊戲中,裝備直接決定玩家人物的能力。可以使用 pg 和 rune 購買需要的物品。暗黑市場中的裝備,每件有不同的 pg 和 rune 能力值 最大可購買件數。kid 作為暗黑戰網的乙個玩家,當然希望使用盡可能少的 pg 和 rune...
傳球遊戲 動態規劃
上體育課的時候,小蠻的老師經常帶著同學們一起做遊戲。這次,老師帶著同學們一起做傳球遊戲。遊戲規則是這樣的 n個同學站成乙個圓圈,其中的乙個同學手裡拿著乙個球,當老師吹哨子時開始傳球,每個同學可以把球傳給自己左右的兩個同學中的乙個 左右任意 當老師再次吹哨子時,傳球停止,此時,拿著球沒傳出去的那個同學...