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

最小邮票数

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;
}
全部评论

相关推荐

点赞 评论 收藏
分享
06-12 17:46
门头沟学院 Java
运营你豪哥:来说重点: ​1.项目前置,时间倒序。​​ 2.​项目描述强化结果与量化效果(STAR原则里的R)。​​ ​3.个人技能精炼,明确掌握程度,突出核心。​​ ​4.增加强有力开头的个人总结部分。​​ 5.​优化教育背景(成绩排名)、合并奖项与活动。​​
听劝,我这个简历该怎么改...
点赞 评论 收藏
分享
评论
3
收藏
分享

创作者周榜

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