动态规划。
要求出和最大的字段,可列出两种状态,得到相应的转移方程。
DP问题要抓住两个核心。1.dp[i]代表什么含义2.列出动态转移方程式
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <iostream>
#include <math.h>
#define For(i,n,m) for(i=n;i<m;i++)
using namespace std;
int b[100005];
int c[100005];
int s1,s2,z1,z2;
int main()
{
int n;
scanf("%d",&n);
int i=1;
while(i<=n)
{
printf("Case %d:\n",i);
int m;
scanf("%d",&m);
for(int j=0;j<m;j++)
scanf("%d",&b[j]);
int Max=-999;
s1=0;
z2=0;
c[0]=b[0];
for(int j=0;j<m;j++)
{
if(c[j-1]>=0)
{
c[j]=c[j-1]+b[j];
z1=j;
}
else
{
c[j]=b[j];
z1=j;
s1=j;
}
if(Max<c[j])
{
Max=c[j];
s2=s1;
z2=z1;
}
}
printf("%d %d %d\n",Max,s2+1,z2+1);
if(i!=n)
printf("\n");
i++;
}
return 0;
}