好久都没写过DP了, 今天写这题时, 竟然状态转移方程都搞错了,本来应该是对DP[i-1]判断其是否小于0来得到DP[i]的,但我却对a[i]做了判断……而且,需要注意的是这道题用cin,cout会TL的……
#include<stdio.h>
#include<string.h>
struct Record
{
int start;
int end;
}record[10001];
int main()
{
int n, i, a[10001], DP[10001], maxx;
while( scanf("%d", &n) && n!=0)
{
memset(DP, 0, sizeof(DP));
for(i=0; i<n; i++)
scanf("%d",a+i);
DP[0]=a[0];
record[0].start=a[0];
record[0].end=a[0];
for(i=1; i<n; i++)
{
if( DP[i-1]<0 )//!我开始写的if(a[i]<0)
{
DP[i]=a[i];
record[i].start=a[i];
record[i].end=a[i];
}
else
{
DP[i]=DP[i-1]+a[i];
record[i].start=record[i-1].start;
record[i].end=a[i];
}
}
maxx=-1000000;
int start, end;
for(i=0; i<n; i++)
{
if( maxx<DP[i])
{
maxx=DP[i];
start=record[i].start;
end=record[i].end;
}
}
if( maxx>= 0)
printf("%d %d %d\n", maxx, start,end);
else
printf("0 %d %d\n",a[0], a[n-1]);
}
}