动态规划法实现找零 java

来源:互联网 发布:成都java平均工资 编辑:程序博客网 时间:2024/06/18 11:41

        最近熟悉了下动态规划法,该方法是一种求解最优化问题的算法设计策略,原问题的最优值可以分解成子结构,且该子结构同样是最优的才成立。这种最优子结构,它与贪心法很相似,当然深入一下,就会发现有本质的区别,贪心法是以自顶向下的方式使用最优子结构的,贪心法会先做出选择没在当时看起来是最优的选择,然后是在求解一个结果的子问题。而动态规划法是自底向上的使用子结构,他是先寻找到子问题的最优解,然后是在做选择。同时在动态规划法中存储重复子问题,通俗的一个问题划分两个值问题,在就两个值问题的过程中,往下的值问题会可能存在重复的值问题。下面我写了个大面值找硬币的实现。

     

package dynamicplanforcoinchange;/** * @author leon(liangzou0318@gmail.com) * @date 2012-11-22 * @filaname CoinsChangeimpl.java */public class CoinsChangeimpl {    public static int makechanges(int money,int[] valuekinds){    int mincoins=money;    for(int i=0;i<valuekinds.length;i++){    if(money<valuekinds[i]){    continue;    }    else{    int temp=makechanges(money-valuekinds[i],valuekinds)+1;    if(mincoins>temp){    mincoins=temp;    }    }    }return mincoins;        }public static void main(String[] args) {int[] valuekinds=new int[]{25,21,10,5,1};int money=63;int a=makechanges(money,valuekinds);System.out.println(a);}}

运行结果是:3