本题要求:
今天开始学习dp数组的运用。
题目如下:
小明跟妈妈去超市买东西,看中了n个好吃的,但是她妈妈只让他拿m个,每个好吃的都有好吃值
a1
,
a2
…
请问小明应该拿哪个好呢?
输入格式:
第一行n,m
下面一行有n个数分别代表好吃值
输出格式:
输出最高好吃值
输入样例:
5 2
1 5 3 2 4
输出样例:
9
解题思路 :
i控制的是当前取的是哪个商品,j决定的是我现在取几个。
为什么从m个开始往1个取呢?
因为这就相当于,你先从商店直接拿了m个商品,接着比较一下,我是将手上的m个中的一个扔掉再拿现在的商品合适还是保持现在的合适。
代码 :
#include <iostream>
using namespace std;
int dp[101];
int main() {
int n, m;
cin >> n >> m;
int price[101];
for (int i = 1; i <= n; i++) {
cin >> price[i];
}
for (int i = 1; i <= n; i++) {
for (int j = m; j >= 1; j--) {
dp[j] = max(dp[j - 1] + price[i], dp[j]);
}
}
cout << dp[m] << endl;
return 0;
}