POJ_2593最大两不想交子段和问题
2012-04-16 11:42
330 查看
http://poj.org/problem?id=2593
/*
Description:
思想:对于数据a[],从左向右依次求解以a[i]结尾的最大子段和b[i],
然后变b[i]为a[i]左边(包括a[i])的最大字段和。
然后,从右向左遍历,求a[i]右边(包括a[i])的最大子段和sum,输出sum+b[i-1]的 最大值。
*/
#include <iostream>
using namespace std;
const int MAXSIZE = 100000 + 10;
int a[MAXSIZE];
int b[MAXSIZE];
int main()
{
int n;
while(cin>>n && n){
int max = INT_MIN;
int sum = 0;
for(int i = 0; i < n; ++i){
scanf("%d", &a[i]);//cin>>a[i];
sum += a[i];
if(sum > max){
max = sum;
}
b[i] = max;
if(sum < 0){
sum = 0;
}
}
max = INT_MIN;
sum = 0;
int ans = max;
for(int i = n - 1; i > 0; --i){
sum += a[i];
if(sum > max){
max = sum;
}
int temp = max + b[i-1];
if(temp > ans){
ans = temp;
}
if(sum < 0){
sum = 0;
}
}
cout<<ans<<endl;
}
/////system("pause");
return 0;
}
/*
Description:
思想:对于数据a[],从左向右依次求解以a[i]结尾的最大子段和b[i],
然后变b[i]为a[i]左边(包括a[i])的最大字段和。
然后,从右向左遍历,求a[i]右边(包括a[i])的最大子段和sum,输出sum+b[i-1]的 最大值。
*/
#include <iostream>
using namespace std;
const int MAXSIZE = 100000 + 10;
int a[MAXSIZE];
int b[MAXSIZE];
int main()
{
int n;
while(cin>>n && n){
int max = INT_MIN;
int sum = 0;
for(int i = 0; i < n; ++i){
scanf("%d", &a[i]);//cin>>a[i];
sum += a[i];
if(sum > max){
max = sum;
}
b[i] = max;
if(sum < 0){
sum = 0;
}
}
max = INT_MIN;
sum = 0;
int ans = max;
for(int i = n - 1; i > 0; --i){
sum += a[i];
if(sum > max){
max = sum;
}
int temp = max + b[i-1];
if(temp > ans){
ans = temp;
}
if(sum < 0){
sum = 0;
}
}
cout<<ans<<endl;
}
/////system("pause");
return 0;
}
相关文章推荐
- POJ_2593最大两不想交子段和问题
- POJ 2479 + POJ 2593(DP 最大双子序列 ^_^)
- POJ 3692 Kindergarten (补图是二分图的最大团问题)
- POJ1336 The K-League[最大流 公平分配问题]
- (Realx dijkstra1.1)POJ 1797 Heavy Transportation(使用dijkstra来解决最大生成树问题)
- POJ3723 Conscription , 最大权森林问题 ->最小生成树问题
- POJ 2680 —— 最小费用流求解区间图的最大权独立集问题
- poj 3281 Dining (最大流解决匹配问题)
- POJ 3692 Kindergarten (补图是二分图的最大团问题)
- poj 1964 最大子矩阵问题
- [ACM] POJ 2593 Max Sequence (动态规划,最大字段和)
- POJ 1459 Power Network (最大流+多源多汇问题+入门题)
- poj 2479 2593 最大字段和
- POJ 3615 牛的最小最大起跳高度问题 Floyd算法的变形应用
- poj 2593 Max Sequence( 最大子段和 )
- POJ 1948 Triangular Pastures (用所有的线段组成最大的三角形) DP || 携程员工运动会场地问题
- POJ 3615 牛的最小最大起跳高度问题 Floyd算法的变形应用
- poj3680 区间图的最大权独立集问题
- poj 2018 斜率优化(最大平均值问题)
- poj 2479 Maximum sum (子序列和最大问题)