題意:給出13類裝備,每種裝備都有攻擊力和防御值,每種裝備只允許選擇一個,求滿足防御值至少在M的情況下,攻擊力最大為多少.
有幾個條件:13種裝備裡如果選擇了雙手裝備,就不能選擇武器和護盾了,還有戒指可以雙手各帶一個.
思路:首先不考慮條件,設dp[i][j]為前i種裝備,防御值達到j的時候的最大攻擊力.
那麼可以有dp[i][j + t] = max(dp[i][j + t], dp[i - 1][j] + d)這裡dp[i - 1][j]不等於-1,也就是必須先能達到這個防御值.
考慮雙手裝備的問題,可以把武器和護盾單獨作為一件雙手裝備或者把兩者合起來組合成一個雙手裝備,這樣條件就沒了.
考慮戒指的問題,選擇單個戒指就相當於只有一只手戴戒指,把戒指兩兩組合起來也就相當於雙手都帶了戒指,所以條件就都沒了.
不過這裡的M比較大,直接從第一類裝備開始遞推可能會超時,由於種類之間沒有關系所以從哪個種類開始遞推都沒有關系,所以這裡可以把種類按照裝備數量從大到小排序,把數量最大的種類作為遞推起點,這裡就可以省下很多時間,具體看代碼.
#include
#include