九度oj 题目1209:最小邮票数

来源:互联网 发布:新网域名自助管理平台 编辑:程序博客网 时间:2024/04/30 04:58
题目描述:

    有若干张邮票,要求从中选取最少的邮票张数凑成一个给定的总值。
    如,有1分,3分,3分,3分,4分五张邮票,要求凑成10分,则使用3张邮票:3分、3分、4分即可。

输入:

    有多组数据,对于每组数据,首先是要求凑成的邮票总值M,M<100。然后是一个数N,N〈20,表示有N张邮票。接下来是N个正整数,分别表示这N张邮票的面值,且以升序排列。

输出:

      对于每组数据,能够凑成总值M的最少邮票张数。若无解,输出0。

样例输入:
1051 3 3 3 4
样例输出:
3
来源:

2007年清华大学计算机研究生机试真题

#include<iostream>#include<algorithm>using namespace std;//  f[i][j] = min(f[i -1][j-v[i]]+1,f[i-1][j])      const int inf = 9999999;int main(){    int dp[1000], a[1000];    int m, n;    while (cin >> m >> n) {          for (int i=1; i<=1000; ++i)             dp[i] = inf;          for (int i=1; i<=n; ++i)              cin >> a[i];          dp[0] = 0;          for (int i=1; i<=n; ++i)             for (int j=m; j>=a[i]; --j)                 dp[j] = min(dp[j-a[i]] + 1, dp[j]);    if (dp[m] >= 1000)      cout << 0 << endl;    else      cout << dp[m] << endl;    }    return 0;}          


0 0
原创粉丝点击