问题:有n种硬币,面值分别为v1,v2,v3,…,vn,存于数组T〔1:n〕中,可以使用的各种面值的硬币个数存于数组Coins〔1:n〕中。对任意钱数0≤m≤20001,设计一个用最少硬币找钱m的方法。

数据输入:   第一行中只有1 个整数给出n的值

      第2 行起每行2 个数,分别是T[j]和Coins[j]

      最后1 行是要找的钱数m

结果输出: 程序运行结束时,将计算出的最少硬币数。

     问题无解时输出-1。

Input

3

1 3

2 3

5 3

18

output

5

本题选用动态规划算法,代码如下:

import java.util.Scanner;
public class coins {
public static void FindMinCoins(int n,int[] values,int[]valuescounts,int money,int[] coinUsed){
for(int i=1;i<=money;i++)
coinUsed[i]=999;//给每种面值所需硬币数初始化一个很大的数值。当最后如果得出的结果是这个数时,说明凑不出来
//遍历硬币面额数组,找到前边所能找到的最小硬币数加1
for(int i=0;i<n;i++) {
for(int j=0;j<valuescounts[i];j++) {
for(int k=money;k>=values[i];k--) {
int temp=coinUsed[k-values[i]]+1;
/*找到几种情况中最小的硬币数 如使用1、2、5元 凑18元:
* 先用1元凑coinUsed[18-1]+1、
* 先用2元凑coinUsed[18-2]+1、
* 先用5元凑coinUsed[18-5]+1
*/
if(temp<coinUsed[k])
coinUsed[k]=temp;
}
}
}
if(coinUsed[money]==999)//若面值所需硬币数还是初始化值,说明在输入的条件下凑不出来
System.out.println("-1");
else
System.out.println(coinUsed[money]);
} public static void main(String[] args) {
Scanner input=new Scanner(System.in);
int n;//硬币面值的种类数
n=input.nextInt();
int[]T=new int[n];//T用来保存硬币面值
int[]Coins=new int[n];//Coins用来保存每种硬币的个数
for(int i=0;i<n;i++)
{
T[i]=input.nextInt();
Coins[i]=input.nextInt();
}
// 需要找零的面值
int money = input.nextInt();
// 保存每一个面值找零所需的最小硬币数,0号单元舍弃不用,所以要多加1
int[] coinsUsed = new int[money + 1];
FindMinCoins(n,T,Coins,money,coinsUsed);
}
}

最少硬币数——Java的更多相关文章

  1. 奇妙的算法【9】YC每个小孩的糖果数,找公约数,最少硬币数

    1,每个小孩的糖果数量是多少 有p个小孩,c个糖果,刚开始第1个小孩发一个糖果,第2个小孩发两个糖果,第p个小孩发p个糖果,如果糖果没有发完,就接着[注意]第1个小孩发p+1个糖果.....第p个小孩 ...

  2. HDU 6214.Smallest Minimum Cut 最少边数最小割

    Smallest Minimum Cut Time Limit: 2000/2000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Oth ...

  3. [LeetCode] 452. Minimum Number of Arrows to Burst Balloons 最少箭数爆气球

    There are a number of spherical balloons spread in two-dimensional space. For each balloon, provided ...

  4. 算法之Python实现 - 002 : 换钱的最少货币数补充(每种货币只能使用一次)

    [题目]:给定数组arr,arr中所有的值都为正数且不重复.每个值代表一种面值的货币,每种面值的货币仅可以使用一张,再给定一个整数aim代表要找的钱数,求组成aim的最少货币数. [代码1]:时间与额 ...

  5. 算法之Python实现 - 001 : 换钱的最少货币数

    [题目]给定数组arr,arr中所有的值都为正数且不重复.每个值代表一种面值的货币,每种面值的货币可以使用任意张,再给定一个整数aim代表要找的钱数,求组成aim的最少货币数. [代码1]:时间与额外 ...

  6. C++实现最少硬币兑换问题

    最少硬币兑换问题 #include<iostream> #include<fstream> using namespace std; int n,L; //n种硬币L长的数组 ...

  7. Leetcode. 回文字符串的分割和最少分割数

    Q1: 回文字符串的分割 Given a string s, partition s such that every substring of the partition is a palindrom ...

  8. OptimalSolution(1)--递归和动态规划(2)矩阵的最小路径和与换钱的最少货币数问题

    一.矩阵的最小路径和 1 3 5 9 1 4 9 18 1 4 9 18 8 1 3 4 9 9 5 8 12 5 0 6 1 14 14 5 11 12 8 8 4 0 22 22 13 15 12 ...

  9. Dubbo负载均衡:最少活跃数(LeastActive)

    官方文档定义 最少活跃调用数,相同活跃数的随机,活跃数指调用前后计数差. 使慢的提供者收到更少请求,因为越慢的提供者的调用前后计数差会越大. 关于活跃数 最少活跃数负载均衡,最关键的点在于活跃数.活跃 ...

随机推荐

  1. 常用方法 DataTable转换为Html

    点击单元格 可以输出行和列,这个功能可以在一些特殊的地方用 public static string GetHtmlString(DataTable dt) { StringBuilder sb = ...

  2. Ubuntu下python3安装tkinter包

    case1: 首先sudo apt-get update(如果不更新很有可能找不到tkinter),然后sudo apt-get install python3-tk,安装完成后就可以使用了. cas ...

  3. uni-app下拉刷新加载刷新数据

    onPullDownRefresh监听该页面用户下拉刷新事件需要在 pages.json 里开启 enablePullDownRefresh "globalStyle": { } ...

  4. shell中脚本参数传递getopts

    while getopts ":a:b:c:" opt do case $opt in a) echo "参数a的值$OPTARG" ;; b) echo &q ...

  5. yum本地安装rrdtool报错,提示版本冲突的解决办法

    [root@mysql-mon40 mm]# yum localinstall rrdtool-1.4.7-1.el6.rfx.x86_64.rpm -y 错误: Multilib version p ...

  6. adb命令和fastboot有什么区别

    ADB中文解释就是调试桥的作用.既然是调试作用,需要开机并连接电脑,所以adb的命令是需要手机开启usb调试,比较典型的命令比如从电脑端敲入adb命令来安应用:adb install .还有一个命令我 ...

  7. TX-LCN5.0.2分布式事务框架源码分析-关键线索罗列-txc部分

    1.注解TxcTransaction2.在其注解接口附近查找aop配置:TransactionAspect3.runTransaction是在执行事务业务代码时的包装逻辑4.transactionSe ...

  8. 解决:Could not load type 'System.ServiceModel.Activation.HttpModule' from assembly 'System.ServiceMode

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/Eric_K1m/article/deta ...

  9. 【基础】Qt SCXML Calculator QML Example

    Qt SCXML Calculator QML Example 这个系统自带的例子原本主要是用来说明SCXML机制的,但是由于计算器的经典和简洁,我认为用来练习QML非常合适,原本的例子还有一些问题, ...

  10. apache httpd 从2.2升级到2.4的过程及中间遇到的坑

    背景描述: 最近集团在做安全扫描,扫出了http的漏洞,一看是监控nagios涉及到的httpd,于是就考虑将httpd升级到最新的版本,在升级的过程中,真是遇到了很多的坑,弄了2天终于搞定了,现在梳 ...