您的位置:首页 > 其它

POJ 2479 Maximum sum[DP]

2014-03-10 22:09 459 查看
类似于HDU 1003 Max Sum这一题,只不过这里是说把数组分为两段,把这两段的最大子段和求出来相加,求出最大的这样的值。

方法还是DP,跟HDU1003一样,从i = 0 to n – 1求一次最大子段和,然后从i = n – 1 to 0求一次最大子段和,最后相加判断即可。





传送:

POJ 2479 Maximum sum http://poj.org/problem?id=2479
POJ 2593 Max Sequence http://poj.org/problem?id=2593
POJ 2479的AC代码如下(2593稍微改一下即可):

#include<iostream>
#include<cstdio>
using namespace std;
#define maxnum 50000
int num[maxnum+10],l[maxnum+10],r[maxnum+10];
int main(){
//freopen("1.txt","r",stdin);
int n;
scanf("%d",&n);
while(n--){
int m;
scanf("%d",&m);
int tmp=0;
int res=-10001;
for(int i=0;i<m;++i){
scanf("%d",&num[i]);
tmp+=num[i];
if(tmp>res)
res=tmp;
if(tmp<0)
tmp=0;
l[i]=res;
}

tmp=0;
res=-10001;
for(int i=m-1;i>=0;--i){
tmp+=num[i];
if(tmp>res)
res=tmp;
if(tmp<0)
tmp=0;
r[i]=res;
}
int mymax=l[0]+r[1];
for(int i=1;i<m-1;++i){
if(l[i]+r[i+1]>mymax)
mymax=l[i]+r[i+1];
}
printf("%d\n",mymax);

}
return 0;
}


本文地址: 程序人生 >> POJ
2479 Maximum sum[DP]

作者:代码疯子(Wins0n) 本站内容如无声明均属原创,转载请保留作者信息与原文链接,谢谢!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: