【題目描述】
爲了慶賀班級在校運動會上取得全校第一名成績,班主任決定開一場慶功會,爲此撥款購買獎品犒勞運動員。期望撥款金額能購買最大價值的獎品,可以補充他們的精力和體力。
【輸入】
第一行二個數n(n≤500),m(m≤6000),其中n代表希望購買的獎品的種數,m表示撥款金額。
接下來n行,每行3個數,v、w、s,分別表示第I種獎品的價格、價值(價格與價值是不同的概念)和能購買的最大數量(買0件到s件均可),其中v≤100,w≤1000,s≤10。
【輸出】
一行:一個數,表示此次購買能獲得的最大的價值(注意!不是價格)。
【輸入樣例】
5 1000
80 20 4
40 50 9
30 50 7
40 30 6
20 20 1
【輸出樣例】
1040
// Created on 2020/2/19
/*#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <climits>*/
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int idata=6000+5;
int n,m;
int minn=INT_MAX,maxx=INT_MIN;
//int maps[idata][idata];
int sumfee[idata];
int quantity[idata],valu[idata],wealth[idata];//件數,價格,價值
int main()
{
int i,j,v;
cin>>n>>m;
for(i=1;i<=n;i++)
cin>>valu[i]>>wealth[i]>>quantity[i];
for(i=1;i<=n;i++)
{
for(v=m;v>=valu[i];v--)
{
for(j=0;j<=quantity[i];j++)
{
if(valu[i]*j>v)
break;
if(sumfee[v]<sumfee[v-j*valu[i]]+wealth[i]*j)
sumfee[v]=sumfee[v-j*valu[i]]+wealth[i]*j;
}
}
}
cout<<sumfee[m]<<endl;
return 0;
}