码迷,mamicode.com
首页 > 其他好文 > 详细

硬币找零

时间:2021-04-16 12:02:09      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:integer   test   时间复杂度   min   硬币   value   coin   amp   ati   

/*
* 硬币找零:三个硬币面值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];
  }
}

多说一句,贪心算法会重复计算,时间复杂度可能会挺高;

这是本人的一些想法,若是有更好的想法,可以互相探讨,若是有错误,尽情指出!

硬币找零

标签:integer   test   时间复杂度   min   硬币   value   coin   amp   ati   

原文地址:https://www.cnblogs.com/lwhao80/p/14664128.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!