poj2593-Max Sequence(最大子段和)

来源:互联网 发布:java编程 窗口不置顶 编辑:程序博客网 时间:2024/06/06 10:20
#include <iostream>#include <cstring>#include <algorithm>using namespace std;int num[100005];int f[100005];int g[100005];int h[100005];struct poj2593 {/*[问题描述]:找出两个子段使得它们的和最大*//*[解题思路]:f[i]表示以第i个数结尾的最大子段和 * g[i]表示以第i个数开始的最大子段和 * h[i]=max{f[i],f[i-1],...,f[1]}=max{f[i],h[i-1]} */int n;void work() {while (cin >> n) {if (n == 0) break;for (int i = 1; i <= n; i++)cin >> num[i];f[0] = 0;h[0] = -1000;for (int i = 1; i <= n; i++) {f[i] = max(num[i], num[i] + f[i - 1]);h[i] = max(f[i], h[i - 1]);}int S = -2000;g[n + 1] = 0;for (int i = n; i >= 1; i--) {g[i] = max(num[i], num[i] + g[i + 1]);S = max(S, g[i] + h[i - 1]);}cout << S << endl;}}};int main(){poj2593 solution;solution.work();return 0;}

0 0
原创粉丝点击