HDU 1003 Max Sum

来源:互联网 发布:淘宝网医用输液瓶口贴 编辑:程序博客网 时间:2024/06/05 15:50
//简单DP,状态转移方程:dp[i] = max( a[i], a[i]+dp[i-1] )#include <iostream>#include <cstring>#include <cmath>using namespace std;int a[100005];int main(){    int t, n, cnt=0;    cin >> t;    while (t--)    {        cin >> n;        int i;        for (i=0; i<n; i++)            cin >> a[i];        //start = max(a[i], a[i]+start);        //maxsum = (maxsum, start);        int start=a[0], maxsum=a[0], begin=0, end=0, pos=0;        for (i=1; i<n; ++i)        {            if (start+a[i]<a[i]){                start = a[i];                pos = i;    //变化的位置            }            else                start += a[i];            if (start > maxsum)            {                maxsum = start;                end = i;                begin = pos;    //当end变化时,begin才能变化            }        }        cout << "Case " << ++cnt << ":" << endl;        cout << maxsum << " " << begin+1 << " " << end+1 << endl;        //最后貌似没有换行了,刚刚做其他的题PE了,这回写上直接A了,不知道直接换2行对不对。。。        if (t != 0)            cout << endl;    }    return 0;}