每日一题 No.30 简单的背包问题

来源:互联网 发布:外卖快餐软件 编辑:程序博客网 时间:2024/05/22 03:31

本题要求:

今天开始学习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;  }
0 0
原创粉丝点击