题目1209:最小邮票数DP
2017-03-21 21:11
281 查看
题目1209:最小邮票数
时间限制:1 秒
内存限制:32 兆
特殊判题:否
提交:2825
解决:956
题目描述:
有若干张邮票,要求从中选取最少的邮票张数凑成一个给定的总值。
如,有1分,3分,3分,3分,4分五张邮票,要求凑成10分,则使用3张邮票:3分、3分、4分即可。
输入:
有多组数据,对于每组数据,首先是要求凑成的邮票总值M,M<100。然后是一个数N,N〈20,表示有N张邮票。接下来是N个正整数,分别表示这N张邮票的面值,且以升序排列。
输出:
对于每组数据,能够凑成总值M的最少邮票张数。若无解,输出0。
样例输入:
样例输出:
时间限制:1 秒
内存限制:32 兆
特殊判题:否
提交:2825
解决:956
题目描述:
有若干张邮票,要求从中选取最少的邮票张数凑成一个给定的总值。
如,有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.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.PrintWriter; import java.math.BigInteger; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.StringTokenizer; public class Main { public static void main(String[] args) { new Task().solve() ; } } class Task{ InputReader in = new InputReader(System.in) ; PrintWriter out = new PrintWriter(System.out) ; void solve(){ while(in.hasNext()){ int m = in.nextInt() ; int n = in.nextInt() ; int[] dp = new int[m+1] ; Arrays.fill(dp , Integer.MAX_VALUE) ; dp[0] = 0 ; while(n-- > 0){ int v = in.nextInt() ; if(v > m) continue ; for(int i = Math.max(0 , m - v) ; i >= 0 ; i--){ if(dp[i] != Integer.MAX_VALUE){ dp[i+v] = Math.min(dp[i+v] , dp[i] + 1) ; } } } out.println(dp[m] == Integer.MAX_VALUE ? 0 : dp[m]) ; //out.flush(); } out.flush(); } } class InputReader { public BufferedReader reader; public StringTokenizer tokenizer; public InputReader(InputStream stream) { reader = new BufferedReader(new InputStreamReader(stream), 32768); tokenizer = new StringTokenizer(""); } private void eat(String s) { tokenizer = new StringTokenizer(s); } public String nextLine() { try { return reader.readLine(); } catch (Exception e) { return null; } } public boolean hasNext() { while (!tokenizer.hasMoreTokens()) { String s = nextLine(); if (s == null) return false; eat(s); } return true; } public String next() { hasNext(); return tokenizer.nextToken(); } public int nextInt() { return Integer.parseInt(next()); } public long nextLong() { return Long.parseLong(next()); } public double nextDouble() { return Double.parseDouble(next()); } public BigInteger nextBigInteger() { return new BigInteger(next()); } }
相关文章推荐
- 题目1209:最小邮票数 动态规划 java实现
- 题目1209:最小邮票数(01背包)
- 九度 oj 题目1209:最小邮票数
- 题目1209:最小邮票数
- 九度题目1209:最小邮票数
- 题目1209:最小邮票数
- 九度题目1209:最小邮票数
- 题目1209:最小邮票数
- 题目1209:最小邮票数
- 九度oj 题目1209:最小邮票数 (01背包)
- 题目1209:最小邮票数
- 九度OJ 题目1209:最小邮票数
- 题目1209:最小邮票数
- 题目1209:最小邮票数
- 九度OJ 1209:最小邮票数 (遍历)
- 九度笔记之 1209最小邮票数
- 九度OJ 1209:最小邮票数 (遍历)
- 清华大学2007年机试-最小邮票数-1209
- 最小邮票数(九度1209)
- 九度1209:最小邮票数-简单dp