动态规划法

最近遇到了一道挺有意思的算法题:四种硬币 1元3元4元5元  ,问:想要凑成n元钱最少几枚硬币?

public class CoinsGameMain {


    public static void main(String[] args) {
        int[] is = {1,3,4,5};
        fun(7,is);
    }

    public static void fun(int k, int[] is){
        int[] i1 = new int[99];
        for (int l=0;l=0){
                        i2[j] = i1[ks]+1;
                    }
                }
                i1[l] = min(i2);
            }
            if (l==k){
                System.out.println((k)+":"+i1[l]);
            }
        }
    }

    private static int min(int[] i1){
        if (i1.length==0) return 0;
        int m = i1[0];
        for (int i=0;i

使用的是动态规划法,动态规划法的思路是:利用上一个结果的值来获取下一个结果没听起来很玄乎,用这道题举例,想要知道99元最少需要多少枚硬币的话,我需要知道:1元需要多少,2元需要多少,3元需要多少,4元...,最后才能知道99元需要多少。

算法思路

fun(n-1)+1,fun(n-3)+1,fun(n-4)+1,fun(n-5)+1之中最小的,已知fun(0)=0;

所以要想知道fun(99)=?,fun(0) fun(1) fun(2) ... fun(99)

 

你可能感兴趣的:(个人笔记)