1. 程式人生 > >ZOJ3769-Diablo III(分組揹包)

ZOJ3769-Diablo III(分組揹包)

 

題意:有兩個屬性:攻擊和防禦,擊敗對手,你需要儘可能大的攻擊和大於等於m的防禦,接下來n行n個裝置,一共13種裝備,每種裝備都有攻擊力和防禦值,每種裝備只允許選擇一個,13種裝備裡如果選擇了雙手裝備,就不能選擇武器和護盾,Finger可以最多同時存在兩個,問你能獲得的最大攻擊。

題解:用dp搞之前,先對限制進行操作,把武器,護盾,雙手放在一組裡,有四種情況(武器/護盾/武器+護盾/雙手),手指有兩種情況(一隻手指/兩隻手指)

           dp轉移方程:(dp[i][j]代表查到第i個裝備,防禦為j時所能擁有的最大攻擊力)

           dp[i][j]=max(dp[i][j],dp[i+1][j]+them[i][k].first)  (them[i][k].first為第i個裝備第k種情況的攻擊力)

           我是從後往前進行裝備查詢的。

           因為防禦你只需要m就足夠,所以迴圈也只到m

TLE調不出來,思路應該ok,佔坑以後改。