动态规划算法求解找硬币问题的递归与非递归实现
2011-04-23 00:03
429 查看
package com.wentora.exercise; /** * 求解找硬币最小方案数 * 递归求解 * 非递归求解 * @author wentora */ import java.util.Scanner; public class CoinDynamic { private int[] coin; CoinDynamic( int[] coin) { this.coin = coin; } public int getMinMethod(int number) { if(number <= 0) return 0; int temp = 1000; for(int i = 0; i < coin.length; i++) { if(number - coin[i] < 0) continue; if(getMinMethod(number - coin[i]) <= temp) temp = getMinMethod(number - coin[i]); } return temp + 1; } public int dp_getMinMethod(int number) { int[] count = new int[number + 1]; for(int i = 1; i <= number; i++) count[i] = 10000; for(int i = 1; i <= number; i++) { for(int j = 0; j < coin.length; j++) { if(coin[j] <= i && count[i] > count[i - coin[j]] + 1) count[i] = count[i - coin[j]] + 1; } } return count[number]; } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Scanner in = new Scanner(System.in); int number; System.out.print("please input number : "); number = in.nextInt(); int length; System.out.print("please input coin size : "); length = in.nextInt(); int[] coin = new int[length]; System.out.print("please input coin : "); for(int i = 0; i < length; i++) coin[i] = in.nextInt(); CoinDynamic cd = new CoinDynamic(coin); System.out.println("The min is : " + cd.getMinMethod(number)); System.out.print("The min by dp is : " + cd.dp_getMinMethod(number)); } }
相关文章推荐
- 贪心算法求解硬币问题的递归与非递归实现
- 简单背包问题的递归与非递归实现
- 0-1背包问题递归与非递归实现
- 动态规划算法求解硬币找零问题(Java)
- 动态规划算法求解硬币找零问题
- 用递归法:设计算法求解汉诺塔问题,并编程实现。 (1) Hanoi(汉诺)塔问题分析 这是一个古典的数学问题,是一个用递归方法解题的典型例子。问题是这样的:古代有一个梵塔,塔内有3个座 A,B,C
- 多个数组间元素排列组合问题求解(Java实现) 标签: 递归排列组合循环
- 动态规划算法求解硬币找零问题改进与优化(Java)
- 动态规划算法求解硬币找零问题(Java)
- 动态规划算法求解硬币找零问题(Java)
- 动态规划求解硬币找零问题——Java实现
- 动态规划算法求解硬币找零问题 (2)
- 数据结构的应用——使用栈和递归实现Hanoi问题求解
- 动态规划算法分析及实例——求解完全背包问题(java实现)
- 动态规划算法求解硬币找零问题(1)
- 0-1背包问题的递归实现与非递归实现
- 背包问题的递归与非递归求解
- 动态规划算法求解硬币找零问题(Java)
- C语言实现Hanoi(汉诺塔)问题的递归求解
- 单链表逆序———不借助外部辅助空间递归与非递归实现