XP 仮想マシンの MingW コンパイラで CodeBlocks を実行しています。cl1pでアクセス可能ないくつかの単純なコードを書きました。これは、 CodeChefのアルゴリズムの質問に答えます(複数のテスト ケースのループをまだ含めていないため、部分的にしか答えていません。
ただし、私の問題は、デバッグモードで実行しているときに、入力に対して正しい出力 5 が得られることです。
3
1
2 1
1 2 3
しかし、ビルドして実行すると、ばかげた巨大な出力 131078 が表示され、ゴミのように見えます。これがどのように起こっているのかわかりませんが、動的メモリ割り当てに関係していると推測しています。ここで何が問題で、どうすれば修正できますか? BotSkoolのオンライン コンパイラで実行したところ、問題なく動作しました。テスト ケースのループを追加した後、コードは CodeChef でも正しく動作しました。
#include <iostream>
using namespace std;
int main()
{
// Take In number of rows
int numofrows;
cin >> numofrows;
// Input Only item in first row
int * prevrow;
prevrow = new int[1];
cin >> prevrow[0];
// For every other row
for (int currownum = 1; currownum < numofrows; currownum++)
{
// Declare an array for that row's max values
int * currow;
currow = new int[currownum+1];
int curnum;
cin >> curnum;
// If its the first element, max is prevmax + current input
currow[0] = prevrow[0] + curnum;
// for every element
int i = 1;
for (; i <= currownum; i++)
{
cin >> curnum;
// if its not the first element, check whether prevmax or prev-1max is greater. Add to current input
int max = (prevrow[i] > prevrow[i-1]) ? prevrow[i] : prevrow[i-1];
// save as currmax.
currow[i] = max + curnum;
}
// save entire array in prev
prevrow = new int[i+1];
prevrow = currow;
}
// get highest element of array
int ans = 0;
for (int j=0; j<numofrows; j++)
{
if (prevrow[j] > ans)
{
ans = prevrow[j];
}
}
cout << ans;
}