博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DP 换硬币问题
阅读量:5362 次
发布时间:2019-06-15

本文共 1386 字,大约阅读时间需要 4 分钟。

设有n种不同面值的硬币,现要用这些面值的硬币来找开待凑钱数m,可以使用的各种面值的硬币个数不限。

   找出最少需要的硬币个数,并输出其币值。

 

package DP;import java.util.Arrays;/** * A country has coins with denominations * 1 = d1 < d2 < · · · < dk. *  * You want to make change for n cents, using the smallest number */public class CoinChange {	public static int MEM[] = new int[10001];   // Can support up to 10000 peso value    public static int coins[] = {1, 2, 3};  // Available coin denominations         public static void main(String[] args) {            	int n = 321;                System.out.println(CC(n) + ", " + CC_DP(n));    }        // 记忆化搜索,top-down 递归    public static int CC(int n) {        if(n < 0)            return Integer.MAX_VALUE -1;        else if(n == 0)            return 0;        else if(MEM[n] != 0)    // If solved previously already            return MEM[n];        else {            // Look for the minimal among the different denominations            MEM[n] = 1+CC(n-coins[0]);            for(int i = 1; i < coins.length; i++)                MEM[n] = Math.min(MEM[n], 1+CC(n-coins[i]));            return MEM[n];        }    }    // bottom-up DP	public static int CC_DP(int n){		int[] minCoins = new int[n+1];		Arrays.fill(minCoins, Integer.MAX_VALUE);				// 第一个硬币		minCoins[0] = 0;				// 算出n前的每一个可换硬币的数量		for(int i=1; i<=n; i++){			// 根据递推公式,看看硬币可拆分的可能性			for(int j=0; j

 

 

转载于:https://www.cnblogs.com/pangblog/p/3400290.html

你可能感兴趣的文章
洛谷 P1991 无线通讯网
查看>>
Codeforces Round #178 (Div. 2) B. Shaass and Bookshelf 【动态规划】0-1背包
查看>>
SparkStreaming 源码分析
查看>>
【算法】—— 随机音乐的播放算法
查看>>
mysql asyn 示例
查看>>
数据库第1,2,3范式学习
查看>>
《Linux内核设计与实现》第四章学习笔记
查看>>
使用iperf测试网络性能
查看>>
Docker 安装MySQL5.7(三)
查看>>
解决VS+QT无法生成moc文件的问题
查看>>
AngularJs练习Demo14自定义服务
查看>>
CF1067C Knights 构造
查看>>
[BZOJ2938] 病毒
查看>>
CSS: caption-side 属性
查看>>
CSS3中box-sizing的理解
查看>>
AMH V4.5 – 基于AMH4.2的第三方开发版
查看>>
Web.Config文件配置之配置Session变量的生命周期
查看>>
mysql导入source注意点
查看>>
linux下编译安装nginx
查看>>
ArcScene 高程不同的表面无法叠加
查看>>