長文失礼いたします。
要件
整数値の列 d0, d1, ..., dn-1 (長さ n)に対して、その部分区間 dp, dp+1,..., dq-1 (0≦p≦q<n)の和の最大値を求めたいです。
入力:
標準入力から列の長さ n (0<n<10000000)が与えられる。
対象とする数値列の数値は、関数呼出し dataset(n); を行った後、関数呼出し nextdata() を行うと整数値 d0, d1, ..., dn-1 が次々と順に得られる。
※この関数呼出し nextdata() を n 回を超えて呼び出そうとするとプログラムの実行が打ち切られます。
出力:
この整数値の列 d0, d1, ..., dn-1 の部分区間 dp, dp+1,..., dq-1 (0≦p≦q<n)の和の最大値を書き出す。
※関数は別ファイルに定義してあります。
コード
c
1#include <stdio.h> 2#include <limits.h> 3 4#define MAX_CNT 1000 5 6 int getSum(int array[], int from, int to) { 7 int sum = 0, i; 8 for (i = from; i <= to; i++) { 9 sum += array[i]; 10 } 11 return sum; 12 } 13 14 void dataset(int n); 15 int nextdata(void); 16 17int main(int argc, char *argv[]){ 18 19 int n, z; 20 scanf("%d", &n); 21 dataset(n); 22 23 int answer = 0; 24 25 int array[9999999] = {0}; 26 27 for(z=0; z<=n-1; z++) { 28 array[z] = nextdata(); 29 } 30 31 int sum = 0, max = INT_MIN, from, to, j, i; 32 33 for (i = 0; i < MAX_CNT; i++) { 34 for (j = i; j < MAX_CNT; j++) { 35 sum = getSum(array, i, j); 36 if (max < sum) { 37 max = sum; 38 from = i; 39 to = j; 40 } 41 } 42 } 43 44 45for (i = from; i < to; i++) { 46 answer = answer + array[i]; 47} 48 49answer = answer + array[to]; 50 51printf("%d\n", answer); 52 53return 0; 54}
うまくいかない点
標準入力値が10000を超えると標準出力の値が正しい答えと異なった値が出力されます。
int型ではなくほかの型を使用する必要があるのでしょうか?
それともほかの場所が間違っているのでしょうか?
わかる方がいらっしゃいましたら、ご教授お願いいたします。