最少硬币问题

<<问题描述:

  有n种不同面值的硬币,各硬币面值存于数组T[1:n];现用这些面值的钱来找钱;各面值的个数存在数组Num[1:n]中。 对于给定的1<=n<=10,硬币面值数组、各面值的个数及钱数m,0<=m<=2001,编程计算找钱m的最少硬币数。

  input : 第一个数字n,后面n行每行两个数,面值T[i],面值个数Num[i];最后是钱数m。

  output:最少硬币数。

Sample intput :

            3

            1 3

            2 3

            5 3

            18

Sample output:

            5

 

<<算法分析: 

    若用动态规划的话,设f(i,Si)表示在剩余钱数为i,以及剩余硬币的状态为Si时的最小硬币组合数。Si在最开始可以表示为(3,3,3),各个硬币的数量各三个。若当前Si=(m,n,p)
  f(i,Si) = min(f(i-5, Si1) (i>5, Si1=(m-1,n,p)),f(i-2, Si2) (i>2, Si2=(m,n-1,p)),f(i-1, Si3) (i>1, Si3=(m,n,p-1)),) + 1。

 

时间: 2024-11-13 08:01:49

最少硬币问题的相关文章

最少硬币问题(受限)NK1132

1132: 最少硬币问题 Time Limit: 1500 ms    Memory Limit: 10000 kB   Total Submit : 909 (187 users)   Accepted Submit : 241 (132 users)   Page View : 9030  Font Style: Aa Aa Aa 设有n 种不同面值的硬币,各硬币的面值存于数组T[1:n]中.现要用这些面值的硬币来找钱.可以使用的各种面值的硬币个数存于数组Coins[1:n]中.对任意钱数0

最少硬币问题(无穷硬币)

1 /*贪心可能导致无解; 2 硬币系统是10,7,5,1元,那么12元用贪心法得到的硬币数为3,而最少硬币数是2. 3 对于此题,可以举个例子: 4 若有1,5,7,10这四种货币,则易知 5 1=1 6 2=1+1 7 3=1+1+1 8 -- 9 6=5+1 10 那么推下去可知 11 表示12这个面值需要的货币数,等于表示11或7或5或2需要的货币数+1. 12 那么题中若要求表示12所需用的最小货币数,只需寻找表示11或7或5或2需要的货币数中的最小值. 13 14 */ 15 16

编程算法之硬币问题 代码(C)

题目: 有1, 5, 10, 50, 100, 500元硬币各若干枚, 现在要用这些硬币来支付A元, 最少需要多少枚硬币? 假定本题至少存在一种支付方案. 使用贪心算法, 优先选用最大的硬币, 并不断的调整硬币的数量. 代码: /* * main.cpp * * Created on: 2014.7.17 * Author: spike */ /*eclipse cdt, gcc 4.8.1*/ #include <stdio.h> #include <limits.h> #inc

NYOJ995硬币找零(简单dp)

/* 题意:给你不同面额的硬币(每种硬币无限多),需要找零的面值是T,用这些硬币进行找零, 如果T恰好能被找零,输出最少需要的硬币的数目!否则请输出剩下钱数最少的找零方案中的最少硬币数! 思路:转换成完全背包的问题! */ #include<iostream> #include<cstring> #include<cstdio> #include<algorithm> #define INF 0x3f3f3f3f using namespace std; i

递归笔试题

1.一个楼梯有20级,每次走1级或是2级,从底走到顶一共有多少中走法? 算法:     设 n 是阶数,f(n) 是上 n 阶的不同走法数,则第一步可以走一阶或者是两阶,     那么这三种情况下剩余的阶数分别为 n-1.n-2,     所以 f(n) = f(n-1) + f(n-2). //递归解法 int solution1(int n) { if(n == 0 || n == 1) return 1; else return solution1(n-1) + solution1(n-2

蓝桥杯-历届试题 翻硬币

历届试题 翻硬币   时间限制:1.0s   内存限制:256.0MB        问题描述 小明正在玩一个"翻硬币"的游戏. 桌上放着排成一排的若干硬币.我们用 * 表示正面,用 o 表示反面(是小写字母,不是零). 比如,可能情形是:**oo***oooo 如果同时翻转左边的两个硬币,则变为:oooo***oooo 现在小明的问题是:如果已知了初始状态和要达到的目标状态,每次只能同时翻转相邻的两个硬币,那么对特定的局面,最少要翻动多少次呢? 我们约定:把翻动相邻的两个硬币叫做一步

js-网页框架的数量是不是最少是1个?是top吗

问题描述 网页框架的数量是不是最少是1个?是top吗 网页框架的数量是不是最少是1个?是top吗 网页框架的数量是不是最少是1个?是top吗 网页框架的数量是不是最少是1个?是top吗 网页框架的数量是不是最少是1个?是top吗 网页框架的数量是不是最少是1个?是top吗 解决方案 1 个的时候也没必要使用框架吧.

千锤百炼!用Photoshop铸造一枚硬币

简介:用椭圆选框工具.路径完成硬币基本造型.用基底凸现.高斯模糊.纹理化.滤镜及曲线.图层样式完成纹理.光影效果. 1.新建600*600,300分辨率,默认前背景色.复制背景层. 再新建图层1,用椭圆选框工具按住SHIFT键拉出正圆,填充黑色.在收缩选区10像素,清除. 用椭圆路径工具拉出正圆,沿路径输入文字(隶书)"中国人民银行". 输入其他需要输入的文字.注意字体和文字大小.位置. 1元的1字是用路径勾出,再描边路径.完成后如图. 用椭圆选框.路径等完成硬币基本造型 2.合并除背

Photoshop制图教程:精绘一元硬币

教程 本教程为www.jcwcn.com中国教程网ICE原创,转载请保留此信息. 1. 新建600*600,300分辨率,默认前背景色.复制背景层. 再新建图层1,用椭圆选框工具按住SHIFT键拉出正圆,填充黑色.在收缩选区10像素,清除. 用椭圆路径工具拉出正圆,沿路径输入文字(隶书)"中国人民银行". 输入其他需要输入的文字.注意字体和文字大小.位置. 1元的1字是用路径勾出,再描边路径.完成后如图. 2.合并除背景图层以外的所有图层,并将合并后的图层命名为硬币. 用魔棒工具点取在