我正在编写一个背包问题的程序,其中我们需要找出实现目标的最低成本,否则无法打印。否则无法实现。
我传递成本和值的二维数组作为指向一维数组的指针。当目标值大约为5000时,代码运行正常。但是对于更高的数字,程序将被强制关闭。由于它不适用于较大的值而导致的错误是什么?
[问题]
第一行是测试用例的数量。重量的 空杯子,E和装满的果汁杯F的重量给出 分别作为每个测试用例第一行的空白。 (1≤E≤F ≤10,000)。目标= F-E。使用的果汁种类数,N, 给出下一行。 (1≤N≤500)从下一行开始 对于N行的数量,每种果汁的单价和重量是 单独给出空白。果汁的单价是正数 ≤50,000;重量是正数≤10000。输入:
1
10 110
2
1 1
30 50输出:
60
代码:
int calculate( int variable, int* input, int n)
{
int array[n+1][variable+1];
for(int j=0; j<variable+1; j++)
array[0][j]=100000000;
for(int i=1; i<n+1; i++)
{
for(int j=0; j<variable+1; j++)
{
if(j==0)
array[i][j]=0;
else if(j<input[n+i-1])
array[i][j]=array[i-1][j];
else
array[i][j]=min(array[i-1][j], input[i-1]+array[i][j-input[n+i-1]]);
}
}
return array[n][variable];
}
int main(int argc, char** argv)
{
int testcase;
cin>>testcase;
for(int t=0; t<testcase; t++)
{
int cup1=0, cup2=0, n=0, result=0;
cin>>cup1>>cup2>>n;
int input[2][n];
for(int j=0; j<n; j++)
{
for(int i=0; i<2; i++)
cin>>input[i][j];
}
int variable=cup2-cup1;
result=calculate(variable, (int*) input, n);
if(result<100000000)
cout<<result<<endl;
else
cout<<"impossible"<<endl;
}
return 0;
}
答案 0 :(得分:0)
result=calculate(variable, (int*) input, n);
应该是
result=calculate(variable, input[0], n);
查看二维阵列结构。
对于较大的n值,可能会耗尽堆栈空间。你可能不得不使用新的。如果你需要使用new,你需要分配1D数组,如果你想将它用作1D数组,否则它不会在连续的内存中。