暗黑遊戲(動態規劃)

2021-07-11 02:00:05 字數 2004 閱讀 2750

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 110

4

3 4 120 

2

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個同學站成乙個圓圈,其中的乙個同學手裡拿著乙個球,當老師吹哨子時開始傳球,每個同學可以把球傳給自己左右的兩個同學中的乙個 左右任意 當老師再次吹哨子時,傳球停止,此時,拿著球沒傳出去的那個同學...