[Atelier Blue アトリエブルー]Homeコンテストパソコン甲子園2003年本選>26問目

26問目(最大連続和)

問題

与えられた整数の並びa1、a2、・・・、anで連続した項の和の最大値を出力して終了するプログラムを作成。

入力は、項数(整数)、1項目(整数)、2項目(整数)、・・・、n項目(整数)

入力


n(項数:2≦n≦100:整数)
a1(第1項:整数)
a2(第2項:整数)
.
.
.
an(第n項:整数)

出力

ai+ai+1+ai+2+ ... +ai+j(連続した項の和の最大値:1≦i<n,1≦j<n-i:整数)

入力例


9
5
-1
6
8
-4
-3
4
-2
3

出力例

18

解き方例

2重for文で大丈夫でしょう。条件により2項以上の和でなければいけないのでその点に注意。

ソースコード

お持ち帰り

C/C++

#include <stdio.h>

int main(){
    int n;
    int a[100];
    int i,max;

    scanf("%d",&n);

    for(i=0;i<n;i++){
        scanf("%d",&(a[i]));
    }

    max = 0;
    //条件より二項以上足し算
    for(i=0;i < n-1;i++){
        int sum,j;
        sum = a[i];
        for(j=i+1;j<n;j++){
            sum+=a[j];
            if(max <sum){
                max =sum;
            }
        }
    }
    printf("%d\n",max);
    return 0;
}

その他

もっと効率的なアルゴリズムがあった気もするのですが、とりあえずこれでご勘弁を。


ページの一番上へ
前のページへ 一覧に戻る 次のページへ
初版2006-5-28
[Atelier Blue アトリエブルー]Homeコンテストパソコン甲子園2003年本選>26問目