• luogu 1121 环状最大两段子段和


    题目大意:

    一个序列看做一个环

    选两段数使它们和最大

    思路:

    定义一个dp数组i j 0/1 表示前i个取了连续的j段 0/1表示取不取第i个

    但是因为看做一个环

    首尾相接的情况可以看做是选三段,其中第一个和最后一个必须取

    然后dp就好了

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cmath>
     4 #include<cstdlib>
     5 #include<cstring>
     6 #include<algorithm>
     7 #include<vector>
     8 #include<queue>
     9 #define inf 2139062143
    10 #define ll long long
    11 #define MAXN 200100 
    12 using namespace std;
    13 inline int read()
    14 {
    15     int x=0,f=1;char ch=getchar();
    16     while(!isdigit(ch)) {if(ch=='-') f=-1;ch=getchar();}
    17     while(isdigit(ch)) {x=x*10+ch-'0';ch=getchar();}
    18     return x*f;
    19 }
    20 int n,a[MAXN],f[MAXN][4][2],ans;
    21 int main()
    22 {
    23     n=read();
    24     for(int i=1;i<=n;i++) a[i]=read();
    25     memset(f,128,sizeof(f));
    26     f[1][1][1]=a[1];
    27     for(int i=2;i<=n;i++)
    28     {
    29         f[i][1][0]=max(f[i-1][1][0],f[i-1][1][1]);
    30         f[i][1][1]=max(f[i-1][1][1],0)+a[i];
    31         f[i][2][0]=max(f[i-1][2][0],f[i-1][2][1]);
    32         f[i][2][1]=max(f[i-1][1][0],max(f[i-1][1][1],f[i-1][2][1]))+a[i];
    33     }    
    34     ans=max(f[n][2][0],f[n][2][1]);
    35     memset(f,128,sizeof(f));
    36     f[1][1][1]=a[1];
    37     for(int i=2;i<=n;i++)
    38     {
    39         f[i][1][0]=max(f[i-1][1][0],f[i-1][1][1]);
    40         f[i][1][1]=f[i-1][1][1]+a[i];
    41         f[i][2][0]=max(f[i-1][2][0],f[i-1][2][1]);
    42         f[i][2][1]=max(f[i-1][1][0],max(f[i-1][1][1],f[i-1][2][1]))+a[i];
    43         f[i][3][0]=max(f[i-1][3][0],f[i-1][3][1]);
    44         f[i][3][1]=max(f[i-1][2][0],max(f[i-1][2][1],f[i-1][3][1]))+a[i];
    45     }
    46     printf("%d",max(ans,f[n][3][1]));
    47 }
    View Code
  • 相关阅读:
    Word+PS制作拼音表格
    VC6.0 突然打不开dsw 工程文件的解决方案
    C# 字符串的连接
    ASP.NET中弹出消息框的几种常见方法
    用五分钟重温委托,匿名方法,Lambda,泛型委托,表达式树
    WPF 显示模态窗口和窗体
    mysql5.5安装图解
    Microsoft Visual Studio 2010 Service Pack 1(exe)
    HTTP错误 404.17
    2014-2-7
  • 原文地址:https://www.cnblogs.com/yyc-jack-0920/p/8757073.html
Copyright © 2020-2023  润新知