硬币找零
作者:互联网
/*
* 硬币找零:三个硬币面值2,5,7,希望用最少的硬币数拼出27
* 分析:用动态规划解
* f[X]:最少的硬币拼出X,设最后一步用a拼出了27,a可以是2/5/7,那么
* f[27]=f[27-a]+1,因为不知道a具体是多少,所以,f[27]=min{f[27-2]+1,f[27-5]+1,f[27-7]+1},
* 扩展:f[X]=min{f[X-2]+1,f[X-5]+1,f[X-7]+1}
*/
public class test {
public static void main(String[] args) {
int[] a = {2,5,7};
int c= getMinCoins(a, 27);
System.out.println(c);
}
public static int getMinCoins(int[] a,int b){//a是2,5,7的数组,b是27
int[] f = new int[b+1];
f[0] = 0;
for (int i = 1; i <= b; i++) {
f[i] = Integer.MAX_VALUE;
for (int j = 0; j < a.length; j++) {
if(i >= a[j] && f[i-a[j]] != Integer.MAX_VALUE){
f[i] = Math.min(f[i-a[j]]+1,f[i]);
}
}
}
if(f[b] == Integer.MAX_VALUE){
f[b] = -1;
}
return f[27];
}
}
多说一句,贪心算法会重复计算,时间复杂度可能会挺高;
这是本人的一些想法,若是有更好的想法,可以互相探讨,若是有错误,尽情指出!
标签:27,min,int,硬币,VALUE,找零,Integer 来源: https://www.cnblogs.com/lwhao80/p/14664128.html