我是动态编程的新手并试图解决常青树问题:切割棒。我已经尝试了几个小时而且我被卡住了。我试图调试它但没有成功。 这是我的代码
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
int length = 5;
int peaces[2][4] = {{1, 2, 3, 4}, {2, 5, 7, 8}};
/*
length 1, 2, 3, 4
value: 2, 5, 7, 8
*/
//create working matrix: number of lengths X lengths
int work[4][6];
//fill in the first column with zeros
for( int k = 0; k < 5; k++ )
{
work[k][0] = 0;
}
//fill in the first row with zeroes
for( int k = 0; k <= length; k++ )
{
work[0][k] = 0;
}
for( int i = 1; i < 5; i++ ) // number of lengths
{
cout << endl << " i: " << i << " " << endl;
for( int j = 1; j < 6; j++ )
{
cout << endl << " j: " << j << " " << endl;
if( j >= i )
{
work[i][j] = max( work[i - 1][j], work[i][j - i] + peaces[1][i-1] );
}
else
{
work[i][j] = work[i - 1][j];
}
cout << endl;<< "inserted:" << work[i][j]<< endl;
for( int i = 0; i < 5; i++ )
{
for( int j = 0; j < 6; j++ )
{
cout << work[i][j] << " ";
}
cout << endl;
}
cout << endl;
}
}
for( int i = 0; i < 5; i++ )
{
for( int j = 0; j < 6; j++ )
{
cout << work[i][j] << " ";
}
cout << endl;
}
return 0;
};
发生了一些非常奇怪的事情,我无法弄清楚原因:在for循环的最后一次迭代中,我得到正确的解决方案,但是当退出循环并打印2D数组时,它会被更改,而不是相同的一个在最后一次迭代中。在两次打印之间,没有对阵列进行任何操作。 我知道这不是一个优化的解决方案,但这是我提出的第一个。 问题:为什么阵列没有以正确的方式填充?我做错了什么?
答案 0 :(得分:0)
避免这类问题的最佳方法是首先为维度定义变量。例如,
int xlen = 4;
int ylen = 5;
int work[xlen][ylen];
然后,您可以在循环中使用xlen和ylen,如果要更改数组的大小,只需更改xlen和ylen。
或者,您可以使用此处找到的答案找到尺寸:How do I find the length of an array?
最后,您应该阅读标准模板库,这样可以让您更聪明地使用#34;你可以使用的对象。