최대 자식 열 문제를 들어, 우리는 매우 잘 알고 있어야합니다. DP 알고리즘으로 매우 쉽고 빠르게 문제 SUM을 찾을 수 있지만, 시작과 열의 끝, 또는 심각한 고려의 가치 문제에 대한 수 있습니다.
A는, 처음에 필요하지 순서를 끝내는 상황은 값이 필요
예로 PTA에 테스트 포인트 :
사실, 어려움이 세 가지 조건을 0 혼합 열 음의 수는 모두에 대한 모든 부정적인 0 점이다.
모두 0 인 경우의 출력은 000이고;
전체가 마이너스 인 경우, 그 출력은 0 [0] [N -1]
부정적인 0을 혼합 경우, 출력은 000.
그것이 생각 천연되도록 남겨진 전체 네거티브 검출 그래서 두 변수 결과 남긴 = 오른쪽 = 0이면 플래그를 설정 = A [0], 오른쪽 = A [N-1].
그런 다음 코드를 쓰는 것은 쉽다 :
#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;
}