题目1209:最小邮票数
2014-03-05 16:47
218 查看
题目描述:
有若干张邮票,要求从中选取最少的邮票张数凑成一个给定的总值。
如,有1分,3分,3分,3分,4分五张邮票,要求凑成10分,则使用3张邮票:3分、3分、4分即可。
输入:
有多组数据,对于每组数据,首先是要求凑成的邮票总值M,M<100。然后是一个数N,N〈20,表示有N张邮票。接下来是N个正整数,分别表示这N张邮票的面值,且以升序排列。
输出:
对于每组数据,能够凑成总值M的最少邮票张数。若无解,输出0。
样例输入:
样例输出:
有若干张邮票,要求从中选取最少的邮票张数凑成一个给定的总值。
如,有1分,3分,3分,3分,4分五张邮票,要求凑成10分,则使用3张邮票:3分、3分、4分即可。
输入:
有多组数据,对于每组数据,首先是要求凑成的邮票总值M,M<100。然后是一个数N,N〈20,表示有N张邮票。接下来是N个正整数,分别表示这N张邮票的面值,且以升序排列。
输出:
对于每组数据,能够凑成总值M的最少邮票张数。若无解,输出0。
样例输入:
10 5 1 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] ); if (f[m] == 0x3f3f3f3f) System.out.println(0); else System.out.println(f[m] ); } } }
相关文章推荐
- 题目1209:最小邮票数
- 题目1209:最小邮票数(01背包)
- 题目1209:最小邮票数DP
- 题目1209:最小邮票数
- 九度题目1209:最小邮票数
- 题目1209:最小邮票数 动态规划 java实现
- 九度题目1209:最小邮票数
- 九度 oj 题目1209:最小邮票数
- 题目1209:最小邮票数
- 九度oj 题目1209:最小邮票数 (01背包)
- 题目1209:最小邮票数
- 题目1209:最小邮票数
- 题目1209:最小邮票数
- 九度OJ 题目1209:最小邮票数
- 九度OJ 1209 最小邮票数 -- 动态规划
- 九度OJ - 1209 - 最小邮票数
- 九度笔记之 1209最小邮票数
- 1209_最小邮票数
- 九度OJ 1209:最小邮票数 (遍历)
- 九度OJ 1209:最小邮票数 (遍历)