> 文档中心 > POJ2479

POJ2479

本题典型的动态规划,求得两个不相交连续字段和的最大值,所以这里我们需要明白,求两个字段和,一个是到i的字段和最大值,还有一个是从i开始的字段和最大值,以此来求解即可;AC代码如下:

#include#include#includeusing namespace std;long long a[50005];long long n;long long f_i[50005];long long i_f[50005];int main(){int t;scanf("%d",&t);while(t--){memset(f_i,-0x3f3f3f3f,sizeof(f_i));memset(i_f,-0x3f3f3f3f,sizeof(i_f));scanf("%lld",&n);for(int i=1;i<=n;i++){scanf("%lld",&a[i]);}for(int i=1;i<=n;i++)f_i[i]=max(f_i[i-1]+a[i],a[i]);for(int i=n;i>=1;i--)i_f[i]=max(i_f[i+1]+a[i],a[i]);for(int i=1;i<=n;i++)f_i[i]=max(f_i[i-1],f_i[i]);for(int i=n;i>=1;i--)i_f[i]=max(i_f[i+1],i_f[i]);long long ans=-0x3f3f3f3f;for(int i=1;i<=n;i++){ans=max(ans,max(max(f_i[i]+i_f[i+1],f_i[i-1]+i_f[i]),f_i[i-1]+i_f[i+1]));//cout<<ans<<" ";}printf("%lld\n",ans);}return 0;}

题解持续更新,有问题请私聊

开发者涨薪指南 POJ2479 48位大咖的思考法则、工作方式、逻辑体系