HDU 1003 Max Sum

来源:互联网 发布:linux ip配置文件 编辑:程序博客网 时间:2024/06/07 16:25

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

大致题意:

求最大子段和,和最大子段和的起始位置和结束位置

大致思路:

简单最大子段和运用
最大子段和讲解:http://blog.csdn.net/hh__01/article/details/49205633

代码:

#include <iostream>#include <memory.h>using namespace std;int data[100000];int main(){    int n;    int count;    int star, end;    int maxend, maxstar;//最大子段和的开头位置和尾部位置    int sum;    int max;    cin >> n;    for (int i = 0; i < n; i++)    {        cin >> count;        for (int j = 0; j < count; j++)        {            cin >> data[j];        }        star = 1;        end = 0;        sum = 0;        max = -9999999;        for (int j = 0; j < count; j++)        {            if (sum < 0)            {                sum = data[j];                star = j + 1;                end = star;            }            else            {                sum += data[j];                end++;            }            if (max < sum)            {                max = sum;                maxstar = star;                maxend = end;            }        }        cout << "Case " << i + 1 << ":" << endl;        cout << max << " " << maxstar << " " << maxend << endl;        if (i + 1 < n)//注意每个情况之间要隔一行,但是最后一行不用,否则会Presentation Error        {            cout << endl;        }    }    return 0;}
0 0
原创粉丝点击