1269:慶功會

 

【題目描述】

爲了慶賀班級在校運動會上取得全校第一名成績,班主任決定開一場慶功會,爲此撥款購買獎品犒勞運動員。期望撥款金額能購買最大價值的獎品,可以補充他們的精力和體力。

【輸入】

第一行二個數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;
}

 

發佈了221 篇原創文章 · 獲贊 10 · 訪問量 9479
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章