border="0" width="330" height="86" src="//music.163.com/outchain/player?type=2&id=502043537&auto=1&height=66">
4/1000
传送门
题目大意:求最大的一段区间和并输出起点和终点 如果有多个 输出第一个
很简单的区间dp…但是我还是PE了好久…令人无比绝望
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn=1e5+10;
int f[maxn],s[maxn],a[maxn];
int main()
{
int Case,n,Cases=0,ans=-200000000,ans_end;
scanf("%d",&Case);
while(Cases!=Case)
{
//ini
ans=-200000000;
if(Cases)printf("\n");
printf("Case %d:\n",++Cases);
scanf("%d",&n);
f[0]=-1;
for(int i = 1; i <= n;i++)
{
scanf("%d",&a[i]);
if(f[i-1]>=0)
f[i]=f[i-1]+a[i],s[i]=s[i-1];
else f[i]=a[i],s[i]=i;
if(ans<f[i]){ans=f[i],ans_end=i;}
}
printf("%d %d %d\n",ans,s[ans_end],ans_end);
}
return 0;
}
以上。