最少硬币问题

10人阅读 评论(0) 收藏 举报
分类:

最少硬币问题
Time Limit: 1000 ms Memory Limit: 65536 KiB
Submit Statistic
Problem Description
设有n种不同面值的硬币,各硬币的面值存于数组T[1:n]中。现要用这些面值的硬币来找钱。可以使用的各种面值的硬币个数存于数组Coins[1:n]中。
对任意钱数0≤m≤20001,设计一个用最少硬币找钱m的方法。
对于给定的1≤n≤10,硬币面值数组T和可以使用的各种面值的硬币个数数组Coins,以及钱数m,0≤m≤20001,计算找钱m的最少硬币数。
Input
输入数据第一行中只有1个整数给出n的值,第2行起每行2个数,分别是T[j]和Coins[j]。最后1行是要找的钱数m。
Output
输出数据只有一个整数,表示计算出的最少硬币数。问题无解时输出-1。
Sample Input
3
1 3
2 3
5 3
18
Sample Output
5
Hint

Source

import java.util.*;

class Main {
    static int min(int a, int b) {
        return a < b ? a : b;
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner ss = new Scanner(System.in);
        int n;
        final int mm = 20001;
        final int coinnum = 15;
        int dp[];
        int coin[];
        int coinn[];
        n = ss.nextInt();
        dp = new int[mm + 1];
        coin = new int[coinnum];
        coinn = new int[coinnum];
        for (int i = 1; i <= mm; i++) {
            dp[i] = mm;
        }
        for (int i = 0; i < n; i++) {
            coin[i] = ss.nextInt();
            coinn[i] = ss.nextInt();
        }
        int m;
        m = ss.nextInt();
        int i, j, k;
        for (i = 0; i < n; i++) {
            for (j = 0; j < coinn[i]; j++) {
                for (k = m; k >= coin[i]; k--) {
                    dp[k] = min(dp[k - coin[i]] + 1, dp[k]);
                }
            }
        }
        if (dp[m] == mm)
            System.out.println(-1);
        else
            System.out.println(dp[m]);
        ss.close();
    }
}
查看评论

最少硬币找零问题-动态规划

动态规划把问题分为子为题
  • KangRoger
  • KangRoger
  • 2014年06月30日 21:15
  • 23322

最少硬币问题(动态规划解决)

设有n中不同面值的硬币,各硬币的面值存在于数组T[1..n]中,可以使用的面值硬币个数不限。假如现在找的钱是j,1 解决方法: 另c[i,j]代表用前中硬币兑换j所用的最少数目。#include ...
  • tzasd89812
  • tzasd89812
  • 2012年04月24日 21:30
  • 2131

最少硬币问题-java实现

package com.wsy.dynamic;public class DynamicCoin { /** * 最少硬币找零问题 * * @param...
  • wengsy_5041
  • wengsy_5041
  • 2017年08月31日 17:15
  • 532

动态规划:最少硬币找零问题、01背包问题、完全背包问题

动态规划把问题分为子为题,解决了这些子问题,再把子问题合并起来,便可以得到问题的解。在解决子问题过程中,需要把子问题的解保存起来方便后面使用。 最少硬币找零问题为:给予不同面值的硬币若干种种(每种硬...
  • wangbaochu
  • wangbaochu
  • 2016年11月09日 15:45
  • 3676

算法_动态规划_最少硬币问题

问题描述: 设有n 种不同面值的硬币,各硬币的面值存于数组T〔1:n〕中。现要用这些面值的硬 币来找钱。可以使用的各种面值的硬币个数存于数组Coins〔1:n〕中。 对任意钱数0≤m≤20...
  • huangxiang360729
  • huangxiang360729
  • 2016年04月08日 20:25
  • 358

动态规划-最少硬币组合问题

import java.util.Scanner;/* * 假设有 1 元,3 元,5 元的硬币若干(无限),现在需要凑出 11 元,问如何组合才能使硬币的数量最少? */ public clas...
  • LK274857347
  • LK274857347
  • 2017年09月19日 11:20
  • 765

经典算法贪心法之最少硬币

有1、2、5、10、20、50、100七种面值的硬币,要支付指定的金额,问怎么支付所用的硬币个数最少。这是一个非常日常化的问题,凭直觉我们会想 到,尽可能先用大面值的硬币,这就是“贪心选择”。以下为...
  • blackField
  • blackField
  • 2011年03月29日 16:47
  • 885

最少硬币找零问题

Problem: Give you the coins, and the total amount of money to change,find a solution for this chang...
  • lzj509649444
  • lzj509649444
  • 2011年12月26日 12:50
  • 4250

NIT-OJ-1449-最少硬币问题-解题报告

问题描述: 设有n种不同面值的硬币,各硬币的面值存于数组T[1:n]中。现要用这些面值的硬币来 找钱。可以使用的各种面值的硬币个数存于数组Coins[1:n]中。 对任意钱数0≤m≤20001,设计一...
  • gqjjqg
  • gqjjqg
  • 2009年09月21日 08:19
  • 1559

最少硬币问题 动态规划

问题描述需要找零x元,有n种面值硬币,求找零最少需要硬币个数的方法。 问题分析这题如果用贪心算法做,很可能无法得到最优解甚至无法无法找零,比如要找零11元,有{5,6,10}三种硬币,最优解是{5,...
  • u013326239
  • u013326239
  • 2016年05月30日 20:42
  • 798
    个人资料
    持之以恒
    等级:
    访问量: 5770
    积分: 746
    排名: 6万+