[HDU 1003] Max Sum

来源:互联网 发布:mac os x 最新版本 编辑:程序博客网 时间:2024/06/10 09:07

http://acm.hdu.edu.cn/showproblem.php?pid=1003

题意:给你一个序列,要你找出一个和最大的连续子串,要求输出起点终点,如果存在多个输出最前面的。

思路:从头开始累加,不断更新最大的区间,累加变成负数就置零重新累加。

#include <cstdio>#include <cstring>#include <iostream>using namespace std;int mapn[100005];const int inf=(1<<31)-1;int main(){    int Test, ct = 1;    cin>>Test;    while(Test--){        int n;        cin>>n;        for(int i = 0; i < n; i++){            cin>>mapn[i];        }        int sum = 0;        int maxn = -inf;        int s, t, ps = 0;        for(int i = 0; i < n; i++){            sum += mapn[i];            if(sum > maxn){                s = ps;                t = i;                maxn = sum;            }            if(sum < 0){                sum = 0;                ps = i + 1;            }        }        cout<<"Case "<<ct++<<":"<<endl;        cout<<maxn<<" "<<s+1<<" "<<t+1<<endl;        if(Test)            cout<<endl;    }    return 0;}
0 0
原创粉丝点击