以下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];
}
}
答案 0 :(得分:1)
尝试
Arrays.fill(dp, 0, dp.length, -1)
你要离开dp [100000]&gt; = 0。
对于堆栈溢出错误,请使用Moar Stack:
java -Xss4m Minimise