题解 | 最小邮票数超简洁写法

最小邮票数

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

// dp[i][j]表示只用前i种邮票能凑成总值M的最少邮票数,如果凑不成为INF
// dp[0][j] = INF
// dp[i][0] = 0
/*  
    dp[i][j] = min(dp[i - 1][j], dp[i - 1][j - p[i]] + 1)
*/
#include<bits/stdc++.h>
using namespace std;
const int INF = 1e8;
int main()  
{
    int M, n;
    while (cin >> M >> n) {
        vector<int> p(n, 0);
        for (int i = 0;i < n;i++)
            cin >> p[i];
        vector<int> dp(M + 1, INF);
        dp[0] = 0;
        for (int i = 0;i < n;i++)
            for (int j = M;j >= p[i];j--)
                dp[j] = min(dp[j], dp[j - p[i]] + 1);
        cout << (dp[M] == INF ? 0 : dp[M]) << endl;
    }
    return 0;
}
全部评论

相关推荐

07-09 18:28
门头沟学院 Java
写着提前批,结果还要实习4个月以上???
程序员牛肉:这种不用看,直接投了,面试的时候问对应的HR就行。有可能他们是直接复制的暑期实习的模板。
点赞 评论 收藏
分享
06-07 17:17
嘉兴学院 教师
心爱的idea:你孩
点赞 评论 收藏
分享
07-07 14:30
复旦大学 Java
遇到这种人我也不知道说啥了
无能的丈夫:但我觉得这个hr语气没什么问题啊(没有恶意
点赞 评论 收藏
分享
评论
3
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务