最小瓶子Java代码

时间:2015-08-08 16:09:13

标签: java algorithm recursion memoization

以下Java代码计算存储给定体积液体所需的最小瓶数。瓶子的储存容量为{1,5,7,10}。它适用于较小的值(如4位数字)但会中断较大的值,如99999(堆栈溢出错误),1000000(错误答案)及以上。代码有什么问题?修改后的代码以及故障描述是预期的。

import java.util.Scanner;
import java.util.Arrays;

public class Minimise
{
  static final int INF = 1000000000;
  static int dp[]=new int[1000010];

  public static void main(String[] args)
   {
    Scanner s = new Scanner(System.in);

    System.out.println("enter the volume");
    int size = s.nextInt();

    Arrays.fill(dp, 0, 100000, -1);

    System.out.println("minimum number of bottles needed:\n"+findmin(size));
   }

  static int findmin(int size)
   {
    if(size<0)
        return INF;
    else if(size==0)
        return 0;        

    if( dp[size] != -1 )
        return dp[size];        
    else
    {
        dp[size] = min( findmin(size-10)+1, findmin(size-7)+1, findmin(size-5)+1, findmin(size-1)+1 );            
        return dp[size];
    }
 }

  static int min(int a,int b,int c,int d)
  {
    int arr[] = new int[4];
    arr[0] = a;
    arr[1] = b;
    arr[2] = c;
    arr[3] = d;
    Arrays.sort(arr);
    return arr[0];
   }
  }

1 个答案:

答案 0 :(得分:1)

尝试

Arrays.fill(dp, 0, dp.length, -1) 

你要离开dp [100000]&gt; = 0。

对于堆栈溢出错误,请使用Moar Stack:

java -Xss4m Minimise