十分钟学会动态规划(简单的)
例题:
假如有 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];
}
}
上一篇:
通过多线程提高代码的执行效率例子
