常常做错的一道题..
因为总是要有一个长度的 所以一开始的s与e都是1 maxx也是a[1]
然后再求 从i=2开始
在这里注意 me永远是当前i 而ms则可能留在原地 可能直接等于i
判断条件就是当前序列和与当前序列和加上a[i]的关系
好久没做题了..手生啊...
#include<stdio.h> #include<string.h> #include<algorithm> #include<map> #include<math.h> using namespace std; int t; int main(){ scanf("%d",&t); int tt=0; while(t--) { tt++; int n; scanf("%d",&n); int a[n+1]; int ms=1; int me=1; int maxx=-9999; for(int i=1;i<=n;i++) scanf("%d",&a[i]); int s=1; int e=1; int h=a[1]; maxx=a[1]; for(int i=2;i<=n;i++) { if(h+a[i]<a[i]) { h=a[i]; s=i; } else { h+=a[i]; } if(maxx<h) { maxx=h; ms=s; me=i; } } printf("Case %d: ",tt); printf("%d %d %d ",maxx,ms,me); if(t!=0) printf(" "); } }