2075 Problem G 點菜問題
阿新 • • 發佈:2018-12-04
問題 G: 點菜問題
時間限制: 1 Sec 記憶體限制: 32 MB
提交: 49 解決: 33
[提交][狀態][討論版][命題人:外部匯入]
題目描述
北大網路實驗室經常有活動需要叫外買,但是每次叫外買的報銷經費的總額最大為C元,有N種菜可以點,經過長時間的點菜,網路實驗室對於每種菜i都有一個量化的評價分數(表示這個菜可口程度),為Vi,每種菜的價格為Pi, 問如何選擇各種菜,使得在報銷額度範圍內能使點到的菜的總評價分數最大。
注意:由於需要營養多樣化,每種菜只能點一次。
輸入
輸入的第一行有兩個整數C(1 <= C <= 1000)和N(1 <= N <= 100),C代表總共能夠報銷的額度,N>代表能點菜的數目。接下來的N行每行包括兩個在1到100之間(包括1和100)的的整數,分別表示菜的>價格和菜的評價分數。
輸出
輸出只包括一行,這一行只包含一個整數,表示在報銷額度範圍內,所點的菜得到的最大評價分數。
樣例輸入
1 3
1 5
3 3
2 5
24 8
2 9
8 6
4 1
1 4
2 2
10 5
2 1
1 4
樣例輸出
5
30
#include<iostream> #include<algorithm> using namespace std; //同01揹包 int main() { int C, N; while (cin >> C >> N) { int dp[10000] = { 0 }, p, v; for (int i = 0; i < N; i++) { cin >> p >> v;//菜價,評價分數 for (int j = C; j >= p; j--) { dp[j] = max(dp[j], dp[j - p] + v); } } cout << dp[C] << endl; } return 0; }