ZOJ 3769 Diablo III(分組揹包)

2022-06-20 21:12:12 字數 1369 閱讀 6865

題意:有13種裝備,每種裝備值可以穿戴一種,特殊的就是雙手**和單手**,雙手**和單手**+盾只能選擇一種,戒指可以雙手各戴乙個。每個裝備都有乙個攻擊值和防禦值,現在要在防禦值至少到達m的情況下可以達到的最大攻擊力。

思路:分組揹包題目。

把單手**和盾組合起來放到雙手**當中,戒指也需要兩兩組合。

接下來就是乙個分組揹包了,比較重要的是這道題目需要開二維陣列,因為題目要求的是至少要達到m的容量,如果超過了m容量,就需要按m來算。

1 #include2 #include3 #include4 #include5 #include6 #include7 #include8 #include9 #include10 #include11 #include

12using

namespace

std;

13 typedef long

long

ll;14 typedef pairpll;

15const

int inf = 0x3f3f3f3f;16

const

int maxn = 400 + 5;17

18int

n,m;

19int d[15][50005

];20 vectorv[15

];21 mapid;

2223

void

init()

2431

32bool cmp(const vectora, const vectorb)

3336

37int

main()

3855

56//

合併單手**和盾牌

57for(int i=0;i11].size();i++)

5863}64

65 v[11

].clear();

66 v[12

].clear();

6768

//合併戒指並且儲存在v[10]中

69int len=v[10

].size();

70for(int i=0;i)

7176}77

78 memset(d,-1,sizeof

(d));

79 sort(v+1,v+14

,cmp);

8081 d[0][0]=0;82

for(int i=1;i<=11;i++)

8393}94

}95 printf("

%d\n

",d[11

][m]);96}

97return0;

98 }

ZOJ 3769 (分組揹包)

題意 13種裝備 每種可能會有多件 每件裝備有兩個屬性 傷害,韌性。現在乙個人想裝備這些裝備,目標是達到韌性m,使得傷害最高,輸出最高傷害。如果達不到目標韌性則輸出 1.有兩個條件 思路 根據題意,每種裝備只能裝備一件,有點像0 1揹包。0 1揹包中容量應該是m 韌性 但是這道題種要求的是需要一定大...

zoj 3668 差分約束

題意 給定l,r a,b 表示序列從l到r的和 a b。並輸出序列最大的取值,誤解輸出 the spacecraft is broken 查分約束 u v 建條邊 則有dis v dis u w u,v 即dis v dis u w u,v sum r 表示0到r的和。則sum r sum l 1 ...

ZOJ1455差分約束

這題做了之後發現自己對差分約束好像終於懂了一點,開始看了roll神的做最長路才a掉 後來自己想了老半天想出來了最短路怎麼寫 最長路版 include include include include include include include include include include inc...