ACM第三次練習—1001

題意:給出序列a [1], a [2], a [3] ...... a [n],計算子序列的最大總和。

思路:最大子序列是要找出由數組成的一維數組中和最大的連續子序列。方法是:只要前i項和還沒有小於0子序列就一直往後擴展,否則丟棄之前的子序列開始新的子序列,同時記錄各個子序列的和,最後取他們中的最大值。

感想:第一道動態規劃題,感覺要考慮的東西很多,腦子有些不都用了~

代碼:



 #include<stdio.h>


int main()


{


    int i,ca=1,t,s,e,n,x,now,before,max;


    scanf("%d",&t);


    while(t--)


    {


       scanf("%d",&n);


       for(i=1;i<=n;i++)


       {


         scanf("%d",&now);


         if(i==1)


         {


            max=before=now;


            x=s=e=1;


         }


         else {


             if(now>now+before)


             {


                before=now;


                x=i;


             }      


             else before+=now;


              }


         if(before>max)


           max=before,s=x,e=i;


       }


       printf("Case %d:\n%d %d %d\n",ca++,max,s,e);


       if(t)printf("\n");


    }


    return 0;


}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章