25 6 -1 5 4 -77 0 6 -1 1 -6 7 -5 Sample OutputCase 1:14 1 4Case 2:7 1 6 AuthorIgnatius.L 先顺序求最大值 找到最大的和 标记末值。再反过来从末值减回去到sum变回0,标记初值。#include <stdio.h>int main(){ int t; scanf("%d",&t); for(int v=1;v<=t;v++) { if(v!=1)printf("/n"); int n,a[100100]={0}; scanf("%d",&n); int sum=0,max=-2000,begin=1,end=1; for(int i=1;i<=n;i++) { scanf("%d",&a[i]); sum=sum+a[i]; if(sum>max)max=sum,end=i; if(sum<0)sum=0; }//求出最大值和末值 sum=max; for(int i=end;i>0;i--) { sum=sum-a[i]; if(sum==0)begin=i; } printf("Case %d:/n",v); printf("%d %d %d/n",max,begin,end); } return 0;}
新闻热点
疑难解答