问题:有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. Xamarin.Forms之XAML

    官网参考 XAML基础知识 XAML(eXtensible Application Markup Language)可扩展应用程序标记语言,允许开发者在Xamarin.Forms应用中采用标记而不是代 ...

  2. 洛谷P1434 [SHOI2002]滑雪

    题目描述 Michael喜欢滑雪.这并不奇怪,因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道在一个区域中最长 ...

  3. 【LG2154】[SDOI2009]虔诚的墓主人

    [LG2154][SDOI2009]虔诚的墓主人 题面 洛谷 题解 如果您没有看懂题,请反复阅读题面及样例 可以发现,对于某一个点,它的答案就是上下左右几个组合数乘起来. 这样直接做复杂度显然爆炸,考 ...

  4. 08-图8 How Long Does It Take (25 分)

    Given the relations of all the activities of a project, you are supposed to find the earliest comple ...

  5. 数位dp技巧

    一个奇怪的东西 正反都能dp!: 正常我们数位dp都是从高到低,以这样的方式保证其小于给定数-> ll n; int num[N],l; ll dp[]; ll dfs(int p,int li ...

  6. How To Wake Up at 5 A.M. Every Day

    How To Wake Up at 5 A.M. Every Day For the past 3 months, I’ve successfully transitioned into being ...

  7. fdisk、mkfs.ext4、make_ext4fs、img2simg、simg2img

    一个典型的嵌入式系统是由uboot+kernel+rootfs组成的,其中uboot和kernel都是二进制,rootfs存在文件系统. 二进制在烧录的时候比较简单,将二进制数据写入存储设备固定地址: ...

  8. 投稿SCI杂志 | 如何撰写cover letter | 如何绘制illustrated abstract

    现在大部分学术期刊杂志都要求提供这两样东西. 一个是面向editor的文章和研究的高度总结:一个是面向读者的高度总结,一图胜千言. 如何制作动画摘要呢? 收集素材,大部分内容在PPT里就能完成. 如何 ...

  9. mysql 添加时间自动添加更新时间自动更新

    在数据库使用中经常使用到时间字段.常用的有创建时间和更新时间.然而在使用中想要创建时间在创建的时候自动设置为当前时间,更新时间在更新时自动更新为当前时间. 创建表 stu CREATE TABLE ` ...

  10. promise 和 async await比较

    async搭配await是ES7提出的,它的实现是基于Promise.这里使用它对比Promise的用法,这里只是简单的适合日常业务的使用场景.   async.await是ES7中的提案,通过同步方 ...