题解 | #最小邮票数#

最小邮票数

https://www.nowcoder.com/practice/83800ae3292b4256b7349ded5f178dd1

#include <climits>
#include<iostream>
#include<algorithm>
#include<vector>

using namespace std;
int main() {
    int m, n;
    while (cin >> m >> n) {
        vector<int> stamps(n + 1, 0);
        vector<vector<int>> dp(n + 1, vector<int>(m + 1, 20));
        for (int i = 1; i <= n; i ++)
            cin >> stamps[i];
        dp[0][0] = 0;
        for (int i = 1; i <= n; i ++) {
            for (int j = 0; j <= m; j ++) {//前i张邮票总和为j的最小邮票数
                if (j < stamps[i]) {
                    dp[i][j] = dp[i - 1][j];//避免出现j - stamps[i]小于0
                    continue;
                } else {
                    dp[i][j] = min(dp[i - 1][j], dp[i - 1][j - stamps[i]] + 1);//要不要选第i张邮票,试了才知道
                }
            }
        }

        if (dp[n][m] == 20)
            cout << 0 << endl;
        else
            cout << dp[n][m] << endl;
    }
    return 0;
}

全部评论

相关推荐

Java抽象带篮子:你这实习经历没突出亮点啊,怎么包装实习经历可以看看我的置顶帖子。冲春招可以看看我的置顶帖子[偷笑R]帖子里写了怎么改简历,怎么包装实习经历,还有2个高质量可速成的项目话术,和我的牛客八股笔记专栏
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
牛客网
牛客企业服务