題意:有13種裝備,每種裝備值可以穿戴一種,特殊的就是雙手**和單手**,雙手**和單手**+盾只能選擇一種,戒指可以雙手各戴乙個。每個裝備都有乙個攻擊值和防禦值,現在要在防禦值至少到達m的情況下可以達到的最大攻擊力。
思路:分組揹包題目。
把單手**和盾組合起來放到雙手**當中,戒指也需要兩兩組合。
接下來就是乙個分組揹包了,比較重要的是這道題目需要開二維陣列,因為題目要求的是至少要達到m的容量,如果超過了m容量,就需要按m來算。
1 #include2 #include3 #include4 #include5 #include6 #include7 #include8 #include9 #include10 #include11 #include12using
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...