最大子列および問題については、我々は非常に精通している必要があります。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;
}