zoukankan      html  css  js  c++  java
  • 某种数列问题

     

    某种数列问题  (jx.cpp/c/pas) 1000MS 256MB

    众所周知,chenzeyu97有无数的妹子(阿掉!>_<),而且他还有很多恶趣味的问题,继上次纠结于一排妹子的排法以后,今天他有非(chi)常(bao)认(cheng)真(zhe)去研究一个奇怪的问题。有一堆他的妹子站成一排,然后对于每个妹子有一个美丽度,当然美丽度越大越好,chenzeyu97妹子很多,但是质量上不容乐观,经常出现很多美丽度为负数的妹子(喜闻乐见),chenzeyu97希望从一排妹子里找出3队连续的妹子,使她们的美丽度和最大。注意,一个妹子不能被编入多个队伍而且一定要拿出三队,不然czy会闲着没事做~。

    简单滴说就是:

    给定一个数列,从中找到3个无交集的连续子数列使其和最大。

    【输入文件】

    第一行一个数n,表示数列长度。

    接下来有n行,每行一个数,第i行为第i个数。

    【输出文件】

    仅有一个数,表示最大和。

    【样例输入】 jx.in

    10

    -1

    2

    3

    -4

    0

    1

    -6

    -1

    1

    -2

    【样例输出】 jx.out

    7

    【样例说明】

    第一队妹子取2,3。

    第二队妹子取0,1。

    第三队妹子取1。

    【数据范围】

    请大家放心,虽然chenzeyu97妹子无数,但是这次他叫来的个数n是有限的。=v=

    对于30%的数据,妹子数不大于200。

    对于60%的数据,妹子数不大于2000。

    对于100%的数据,妹子数1000000。

    思路:

      被代码吃了(在代码的注释中);

    来,上代码:

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #define maxn 1000010
    using namespace std;
    int n,a[maxn],f[maxn][4][2];//第i个妹子第j个队列(0:不选择当前妹子,1:选择当前妹子) 
    int main()
    {
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
            scanf("%d",&a[i]);
        memset(f,-127/3,sizeof(f));
        f[0][0][0]=0;
        for(int i=1;i<=n;i++)
            for(int j=0;j<=3;j++){
                f[i][j][0]=max(f[i-1][j][0],f[i-1][j][1]);// 当前选到第i个妹子并且当前是第j段,和是选到前一个妹子选或不选取大
                /*结束前一段,现在舍弃两队之间的妹子的过程中*/ 
                if(j)f[i][j][1]=max(f[i-1][j-1][0],f[i-1][j-1][1])+a[i];
                //当选到第一段或者往后时(第0段表示选之前价值低舍弃的部分)
                //第i个妹子并且是第j段且选择时,价值从前一个妹子前一段选择和前一个妹子前一段不选择取大 
                /*结束前一队,开始了现在新的一队(两队队尾队头相接或者是两队之间有空缺取大)*/
                f[i][j][1]=max(f[i][j][1],f[i-1][j][1]+a[i]);
                //第i个妹子并且当前是第j段选择,上半段dp方程和前一个妹子第j段(在本段的基础的上继续添加)
                /*接着刚才的取大,当前队列是新的一队还是未选择完的本队继续选择*/            
            }
        printf("%d
    ",max(f[n][3][0],f[n][3][1]));
    }
  • 相关阅读:
    Java实现 LeetCode 69 x的平方根
    Java实现 LeetCode 68 文本左右对齐
    Java实现 LeetCode 68 文本左右对齐
    Java实现 LeetCode 68 文本左右对齐
    Java实现 LeetCode 67 二进制求和
    Java实现 LeetCode 67 二进制求和
    Java实现 LeetCode 67 二进制求和
    Java实现 LeetCode 66 加一
    Java实现 LeetCode 66 加一
    CxSkinButton按钮皮肤类
  • 原文地址:https://www.cnblogs.com/IUUUUUUUskyyy/p/6073848.html
Copyright © 2011-2022 走看看