HDOJ1003

来源:互联网 发布:ubuntu systemd 安装 编辑:程序博客网 时间:2024/05/28 15:59
#include <stdio.h>#include <stdlib.h>#include <limits.h>typedef struct result{int max_sum;int left;int right;}result;int seq[100001];result max_sub_sum(int n){int thesum=0;//记录数组中从开始位置到当前位置的和result res;//记录返回结果res.max_sum=INT_MIN;int i;for(i=1;i<=n;i++){//处理全为负数的情况if(res.max_sum<seq[i]){res.max_sum=seq[i];res.left=i;res.right=i;}}int left_idx=1;//记录最大和子序列的左下标for(i=1;i<=n;i++){thesum+=seq[i];if(thesum>res.max_sum){res.max_sum=thesum;res.right=i;//更新右下标res.left=left_idx;//更新左小标}if(thesum<0){//丢弃小于0的情况thesum=0;left_idx=i+1;}}return res;}int main(){int T;scanf("%d",&T);int i;for(i=1;i<=T;i++){int n;scanf("%d",&n);int j;for(j=1;j<=n;j++){scanf("%d",&seq[j]);}result r=max_sub_sum(n);printf("Case %d:\n",i);printf("%d %d %d\n",r.max_sum,r.left,r.right);if(i!=T)printf("\n");}return 0;}


 

原创粉丝点击