zoukankan      html  css  js  c++  java
  • noip模拟赛 某种数列问题

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

    简单滴说就是:

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

    输入输出格式

    输入格式:

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

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

    输出格式:

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

    输入输出样例

    输入样例#1:
    10
    -1
    2
    3
    -4
    0
    1
    -6
    -1
    1
    -2
    输出样例#1:
    7
    
    【样例说明】
    第一队妹子取2,3。
    第二队妹子取0,1。
    第三队妹子取1。

    说明

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

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

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

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

    而且,由于chenzeyu97没有CCR那样的影响力,所以他的妹子选完的最大美丽度和不超过maxlongint。(注:CCR随便选就爆long long,因为他是把妹狂魔=V=)。

    分析:这道题其实和子串那道题类似,算法肯定是O(n)的算法,考虑dp,设f[i][j][k]表示前i位选了j队,第i位选不选,那么递推式就很容易看出来:

    f[i][j][0] = max(f[i-1][j][1],f[i-1][j][0])

    f[i][j][1] = max(f[i-1][j-1][0],f[i-1][j-1][1],f[i-1][j][1]) + a[i] (选i的话要么和前面一个数合并成一个队要么还要再开一队).

    像这类一共有n个元素的排列,每个元素要么选或不选,最多只能有k个区间的问题的解法都是差不多的,用一维表示选到了第几位,用一维表示选了几个区间,还要用一维表示选不选,有的时候可能还要开一个数组来记录辅助信息.

    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    #include <queue>
    #include <cmath>
    
    using namespace std;
    
    const int maxn = 1000010;
    long long a[maxn], f[maxn][4][2],n;
    
    int main()
    {
        scanf("%lld", &n);
        for (int i = 1; i <= n; i++)
            scanf("%lld", &a[i]); 
        for (int i = 1; i <= n; i++)
            for (int j = 1; j <= 3; j++)
            {
                f[i][j][0] = max(f[i - 1][j][0], f[i - 1][j][1]);
                f[i][j][1] = max(max(f[i - 1][j - 1][1], f[i - 1][j - 1][0]), f[i - 1][j][1]) + a[i];
            }
        printf("%lld
    ", max(f[n][3][0], f[n][3][1]));
    
        return 0;
    }
  • 相关阅读:
    汇编入门学习笔记 (十二)—— int指令、port
    c#List泛型数据扩展,把List&lt;&gt;型数据格式化成List&lt;SelectListItem&gt;,用来作dropdownlist的数据
    使用 Jersey 和 Apache Tomcat 构建 RESTful Web 服务
    Centos6.5 VNC 配置
    HP服务器更换主板前后的注意事项
    【转】BCSphere入门教程01:Immediate Alert--不错
    【转】命令行使用7zip
    【转】 Android BCM4330 蓝牙BT驱动调试记录
    【转】android-support-v7-appcompat.jar 的安装及相关问题解决 --- 汇总整理
    【转】如何在eclipse里关联查看android源码
  • 原文地址:https://www.cnblogs.com/zbtrs/p/7561741.html
Copyright © 2011-2022 走看看