#156-[揹包DP]慶功會
阿新 • • 發佈:2018-11-03
Description
為了慶賀班級在校運動會上取得全校第一名成績,班主任決定開一場慶功會,為此撥款購買獎品犒勞運動員。期望撥款金額能購買最大價值的獎品,可以補充他們的精力和體力。
Input
第一行二個數n(n<=500),m(m<=6000),其中n代表希望購買的獎品的種數,m表示撥款金額。
接下來n行,每行3個數,v、w、s,分別表示第I種獎品的價格、價值(價格與價值是不同的概念)和購買的數量(買0件到s件均可),其中v<=100,w<=1000,s<=10。
Output
第一行:一個數,表示此次購買能獲得的最大的價值(注意!不是價格)。
Sample Input
5 1000
80 20 4
40 50 9
30 50 7
40 30 6
20 20 1
Sample Output
1040
多重揹包模板
#include <iostream> #define SIZE 6010 using namespace std; int dp[SIZE]; int main(int argc, char** argv) { int n, t, i, s, w, c, count; scanf("%d%d", &n, &t); while (n--) { scanf("%d%d%d", &w, &c, &s); count = 0; while (s--) { if (++count * w > t) // 如果已經大於揹包容量就直接跳過 { break; } for (i = t; i >= w; --i) { dp[i] = max(dp[i], dp[i-w] + c); // 進行動態規劃 } } } printf("%d", dp[t]); return 0; }