最少硬币数——Java
问题:有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的更多相关文章
- 奇妙的算法【9】YC每个小孩的糖果数,找公约数,最少硬币数
1,每个小孩的糖果数量是多少 有p个小孩,c个糖果,刚开始第1个小孩发一个糖果,第2个小孩发两个糖果,第p个小孩发p个糖果,如果糖果没有发完,就接着[注意]第1个小孩发p+1个糖果.....第p个小孩 ...
- HDU 6214.Smallest Minimum Cut 最少边数最小割
Smallest Minimum Cut Time Limit: 2000/2000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Oth ...
- [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 ...
- 算法之Python实现 - 002 : 换钱的最少货币数补充(每种货币只能使用一次)
[题目]:给定数组arr,arr中所有的值都为正数且不重复.每个值代表一种面值的货币,每种面值的货币仅可以使用一张,再给定一个整数aim代表要找的钱数,求组成aim的最少货币数. [代码1]:时间与额 ...
- 算法之Python实现 - 001 : 换钱的最少货币数
[题目]给定数组arr,arr中所有的值都为正数且不重复.每个值代表一种面值的货币,每种面值的货币可以使用任意张,再给定一个整数aim代表要找的钱数,求组成aim的最少货币数. [代码1]:时间与额外 ...
- C++实现最少硬币兑换问题
最少硬币兑换问题 #include<iostream> #include<fstream> using namespace std; int n,L; //n种硬币L长的数组 ...
- Leetcode. 回文字符串的分割和最少分割数
Q1: 回文字符串的分割 Given a string s, partition s such that every substring of the partition is a palindrom ...
- 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 ...
- Dubbo负载均衡:最少活跃数(LeastActive)
官方文档定义 最少活跃调用数,相同活跃数的随机,活跃数指调用前后计数差. 使慢的提供者收到更少请求,因为越慢的提供者的调用前后计数差会越大. 关于活跃数 最少活跃数负载均衡,最关键的点在于活跃数.活跃 ...
随机推荐
- JS的ES6的async
1.async概念: 真在意义上解决异步回调函数的问题(由于promise的then方法中还是使用回调函数,而async中await并没有使用回调函数真正意义上解决回调函数),同步流程表达异步操作. ...
- cogs 2569. [東方] 博丽灵梦 梦想妙珠
二次联通门 : cogs 2569. [東方] 博丽灵梦 梦想妙珠 /* cogs 2569. [東方] 博丽灵梦 梦想妙珠 莫队水过.. 好久没一遍AC了.. 卡线上榜2333 */ #includ ...
- 《Maven实战》整理
一.maven介绍 Maven是优秀的构建工具,能够帮我们自动化构建过程,从清理.编译.测试到生成报告,再到打包和部署. Maven能帮助我们标准化构建过程.在Maven之前,十个项目可能有十种构建方 ...
- 累积分布函数(cumulative distribution function)
sklearn实战-乳腺癌细胞数据挖掘(博客主亲自录制视频教程,QQ:231469242) https://study.163.com/course/introduction.htm?courseId ...
- lightgbm GPU版本安装
python机器学习-乳腺癌细胞挖掘(博主亲自录制视频)https://study.163.com/course/introduction.htm?courseId=1005269003&u ...
- java上传图片并压缩图片大小
Thumbnailator 是一个优秀的图片处理的Google开源Java类库.处理效果远比Java API的好.从API提供现有的图像文件和图像对象的类中简化了处理过程,两三行代码就能够从现有图片生 ...
- MYSQL报错:1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column
1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'rpa ...
- Windows上的那些效率神器,让你快到飞起
转自:https://zhuanlan.zhihu.com/p/41771626 本文为Windows上有哪些让你效率倍增的软件和小技巧系列第二篇,上一篇请点击蓝字查看:打造高逼格PC,让你的电脑好用 ...
- js session失效退出iframe
// 代码加入登陆页面中 if( window.top != window.self ){ window.top.location = window.location.href; }
- git 本地删除修改文件后从远程拉取
单个文件 git checkout a.php 当前目录 git checkout .