1007. Maximum Subsequence Sum (25)

来源:互联网 发布:简单bbs论坛源码php 编辑:程序博客网 时间:2024/06/06 05:42

题目详情:https://www.patest.cn/contests/pat-a-practise/1007
最大字串和问题,但是我却思考了好久,原因是我没有看清题意[衰]。例子中给出的输出也太具有迷惑性了,当然主要还是看清题意。特此谨记!

#include <iostream>using namespace std;#define K 10001int main(){    int k,seq[K],negative=0;    scanf("%d",&k);    for(int i=1;i<=k;i++)    {        scanf("%d",&seq[i]);        if(seq[i]<0)            negative++;    }    if(negative==k)//全是负数的情况    {//输出0,第一个元素和最后一个元素        cout<<0<<" "<<seq[1]<<" "<<seq[k]<<endl;        return 0;    }    int location=seq[1],largeSum=seq[1];    //ls和le存储局部location的最优的位置,ts和te存储全局最优的位置    int ls=1,le=1,ts=1,te=1;    for(int i=2;i<=k;i++)    {        //location是包含当前元素的局部最优        if( location+seq[i]>seq[i] )//location是一个正数,前边某个序列的值是正数        {            location=location+seq[i];//改变局部最优的值            le=i;//只需要改变结束的位置        }        else//location+seq[i]<seq[i],当前元素的值较大        {            location=seq[i];            ls=le=i;        }        //该条语句主要用来更新全局最优的解        if(location>largeSum)        {            largeSum=location;            ts=ls;te=le;        }    }    cout<<largeSum<<" "<<seq[ts]<<" "<<seq[te]<<endl;    return 0;}