题目1209:最小邮票数
来源:互联网 发布:torrent下载软件 编辑:程序博客网 时间:2024/05/17 03:19
- 题目描述:
有若干张邮票,要求从中选取最少的邮票张数凑成一个给定的总值。
如,有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
import java.io.IOException;import java.io.FileReader;import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.Scanner; class Main{ public static final boolean DEBUG = false; public static void main(String[] args) throws IOException { Scanner cin; int m, n; if (DEBUG) { cin = new Scanner(new FileReader("e:\\uva_in.txt")); } else { cin = new Scanner(System.in); } while (cin.hasNext()) { m = cin.nextInt(); n = cin.nextInt(); //System.out.println("m = " + m + " n = " + n); int[] c = new int[n + 1]; for (int i = 1; i <= n; i++) { c[i] = cin.nextInt(); //System.out.println(c[i]); } int[][] f = new int[m + 1][n + 1]; for (int i = 1; i <= m; i++) { for (int j = 0; j <= n; j++) f[i][j] = 0x3f3f3f3f; } for (int i = 0; i <= n; i++) f[0][i] = 0; for (int j = 1; j <= n; j++) { for (int i = 1; i <= m; i++) { f[i][j] = f[i][j - 1]; if (i >= c[j]) f[i][j] = Math.min(f[i][j], f[i - c[j]][j - 1] + 1); } } //System.out.println(f[m][n]); if (f[m][n] == 0x3f3f3f3f) System.out.println(0); else System.out.println(f[m][n]); } }}
0 0
- 题目1209:最小邮票数
- 题目1209:最小邮票数
- 题目1209:最小邮票数
- 题目1209:最小邮票数
- 题目1209:最小邮票数
- 题目1209:最小邮票数
- 题目1209:最小邮票数
- 题目1209:最小邮票数
- 九度题目1209:最小邮票数
- 九度题目1209:最小邮票数
- 题目1209:最小邮票数DP
- 九度oj 题目1209:最小邮票数
- 九度OJ 题目1209:最小邮票数
- 九度 oj 题目1209:最小邮票数
- 1209_最小邮票数
- 九度oj 题目1209:最小邮票数 (01背包)
- 九度OJ 1209: 最小邮票数
- 最小邮票数(九度1209)
- PHP 文件上传
- kankan转载:anddroid卡牌效果实现
- 利用stm32来产生1M,1K,1Hz的3个方波(转)
- 画一个圆形
- 简易占座
- 题目1209:最小邮票数
- objective-c 单例模式详解
- 正则表达式小结
- The third day
- 安卓开发分类例子大全-免积分下载20140305更新
- Sicily 1931. 卡片游戏
- MySQL 插入数据时,中文乱码问题的解决。
- java实现排列组合
- C#三种性能分析计时器介绍