首页 > 代码库 > Maximum sum(poj 2479)
Maximum sum(poj 2479)
题意:给一段数列,将这个数列分成两部分,使两部分的最大子段和的和最大,输出和
/* 看数据没想到是(O)n的算法,求出从前向后的最大子段和和从后向前的最大子段和, 然后枚举断点。 第一次提交不小心折在数组最小值的赋值上…… */ #include<cstdio>#include<iostream>#include<cstring>#define M 50010#define INF 1000000000using namespace std;int a[M],f1[M],f2[M],v1[M],v2[M],n;int main(){ int T;scanf("%d",&T); while(T--) { memset(f1,466,sizeof(f1)); memset(f2,466,sizeof(f2)); memset(v1,466,sizeof(v1)); memset(v2,466,sizeof(v2)); scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&a[i]); for(int i=1;i<=n;i++) f1[i]=max(f1[i-1]+a[i],a[i]),v1[i]=max(f1[i],v1[i-1]); for(int i=n;i>=1;i--) f2[i]=max(f2[i+1]+a[i],a[i]),v2[i]=max(f2[i],v2[i+1]); int ans=-INF; for(int i=1;i<n;i++) ans=max(ans,v1[i]+v2[i+1]); printf("%d\n",ans); } return 0;}
Maximum sum(poj 2479)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。