十分钟学会动态规划(简单的)
例题:
假如有 2 块,3 块,7 块面额的纸币,如何使用最小的纸币数量来凑成 100 块。 答案:15
动态规划方程:
前十项表格:
相信你们看完这俩张图就有一点懂了,数组c存的是最少钱数,i代表钱,数组value代表钱的种类,就像堆积木一样,打好地基,后面的直接调用就行了,下面源码也简单,仅供参考。测试用的没删,但是运行出来很直观。
class Solution { public int coinChange(int[] money, int num) { if(num==0){ return 0; } int size = money.length; int mon[] = new int[num+1]; for (int i = 1; i <= num; i++) { int min = Integer.MAX_VALUE; for (int j=0;j<size;j++) { if(i - money[j] == 0){ min = 1; }else if (i - money[j] > 0&&mon[i-money[j]]!=0) { min =Math.min(mon[i-money[j]]+1,min); } } mon[i] = min==Integer.MAX_VALUE?0:min; } return mon[num]==0?-1:mon[num]; } }
上一篇:
通过多线程提高代码的执行效率例子