zoukankan      html  css  js  c++  java
  • [poj 2479] Maximum sum -- 转载

    转自 CSND

                                        想看更多的解题报告: http://blog.csdn.net/wangjian8006/article/details/7870410
                                         转载请注明出处:
    http://blog.csdn.net/wangjian8006

    题目大意: 对于连续的整数和的串s1和s2,s1与s2不相交,使得s1+s2最大
    解题方法: DP。
     lt[i]代表以第i个元素结尾的串最大值
     rt[i]代表以第i个元素开头的串的最大值
     那么设置一个rtm[i]代表取后i个元素之中最大连续子串的和

     很显然,lt[i]=max(a[i],lt[i-1]+a[i]);
     rt[i]=max(a[i],rt[i+1]+a[i]);
     rtm[i]=max(rtm[i+1],rt[i]);

    此题与poj2593一模一样,但是要将MAXV改成10010就可以A了

     1 #include <iostream>
     2 using namespace std;
     3 #define max(a,b) a>b?a:b
     4 #define MAXV 50010
     5 #define inf -10010
     6 
     7 int lt[MAXV],rt[MAXV],a[MAXV],rtm[MAXV];
     8 
     9 int main(){
    10     int t,n,i,temp;
    11     scanf("%d",&t);
    12     while(t--){
    13         scanf("%d",&n);
    14         for(i=1;i<=n;i++)
    15             scanf("%d",&a[i]);
    16 
    17         temp=inf;lt[1]=a[1];rt[n]=a[n];
    18         for(i=2;i<=n;i++){
    19             lt[i]=max(a[i],lt[i-1]+a[i]);        
    20         }
    21         for(i=n-1;i>=1;i--){
    22             rt[i]=max(a[i],rt[i+1]+a[i]);
    23         }
    24 
    25         rtm[n]=rt[n];
    26         for(i=n-1;i>=1;i--)
    27             rtm[i]=max(rtm[i+1],rt[i]);
    28 
    29         int ma=inf;
    30         for(i=2;i<=n;i++){
    31             ma=max(ma,lt[i-1]+rtm[i]);
    32         }
    33         printf("%d
    ",ma);
    34 
    35     }
    36     return 0;
    37 }
    View Code


     

  • 相关阅读:
    Unity3d启动事件
    UI 科学
    LOL
    流光
    PlayerPrefs
    C++
    Android Home
    状态机
    架构设计
    AI
  • 原文地址:https://www.cnblogs.com/night-ride-depart/p/5271297.html
Copyright © 2011-2022 走看看