最大のサブ列との綿密な調査

最大子列および問題については、我々は非常に精通している必要があります。DPアルゴリズムでは非常に迅速かつ容易に問題のSUMを見つけることが、始まりと列の末尾、または真剣に検討に値する問題のためにすることができます。

   、初めに必要ではないシーケンスを終了、状況は値のみが必要です

一例として、PTA上のテストポイントへ:

   実際には、困難が列の負の数、0は三つの条件と混合していることであるすべてのために、すべての負の0です。

  すべて0の場合、出力は000です。

  全体が負である場合には、次に出力は 0 [0]、A [N -1]

  負の0を混在させる場合は、出力がある 000。

  右= [N-1]、左側の2つの変数の結果が0 =右=左完全陰性を検出した場合、フラグを設定するように、考えるのが自然であり、それはそう= [0]。

  そして、コードが出て書きやすいです。

#include<stdio.h>
    int f4(int a[],int n){
    int i,max=0,now=0,l=0,r=0,flag=0;
    a[10001]=0;a[10002]=0;
       
    for(i= 0;i<n;i++){
        if(a[i]>=0)
            flag=1;

        if(now<0){
            l=i;
            r=i;        
            now=a[i];   //刚吸收的数可能非常大,所以必须更新l与r
        }
        else {
            r=i;
            now+=a[i];
        }

        if(now>max){
             max=now;
             a[10002]=a[r];
             a[10001]=a[l];
        }

    }
        if(!flag){
            a[10001]=a[0];
            a[10002]=a[n-1];
           }

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

      int sum=f4(a,n);
      printf("%d %d %d",sum,a[10001],a[10002]);

    return 0;
}


リリース8元の記事 ウォンの賞賛1 ビュー197

おすすめ

転載: blog.csdn.net/Moby97/article/details/78358596