HDU 1003 Max Sum

来源:互联网 发布:守望先锋 数据查询 编辑:程序博客网 时间:2024/06/03 22:56

分析:求最大字段和,sum[i]表示以num[i] 结尾在1~i之间的最大和,sum[i]=(sum[i-1]+num[i]>num[i])?sum[i-1]+num[i]:num[i];最后,max = {sum[i],1<=i<=n} 。

代码如下:

#include<iostream>using namespace std;int num[100005];int sum[100005];int s_point[100005];int case_num = 0;int main() {    int t, n, end;    cin >> t;    while (t--) {        end = 1;        memset(num, 0, sizeof(num));        memset(s_point, 0, sizeof(s_point));        cin >> n;        for (int i = 1; i <= n; ++i) {            cin >> num[i];        }        sum[1] = num[1];        s_point[1] = 1;        for (int i = 2; i <= n; ++i) {            if (sum[i - 1] >= 0) {                sum[i] = sum[i - 1] + num[i];                s_point[i] = s_point[i - 1];            }            else {                sum[i] = num[i];                s_point[i] = i;            }            if (sum[i] > sum[i - 1]) {                end = i;            }        }        cout << "Case " << ++case_num << ":" << endl;        cout << sum[end] << " " << s_point[end] << " " << end << endl;        if (t) {            cout << endl;        }    }}
0 0
原创粉丝点击