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;
    }
  • 相关阅读:
    调用ajax的返回值,需要再ajax之外的函数体里return,以及同步异步问题
    JavaScript的进阶之路(三)引用类型之Object类型和Array类型
    JavaScript的进阶之路(二)函数简介,变量、作用域和内存问题
    JavaScript的进阶之路(一)
    mui.ajax()和asp.net sql服务器数据交互【3】最终版
    mui.ajax()和asp.net sql服务器数据交互【2】json数组和封装
    mui.ajax()和asp.net sql服务器数据交互【1】
    js和.net后台交互
    input文字垂直居中和按钮对齐问题,兼容IE8
    ios 搜索请求之没有报文返回 之 utf-8 之谜
  • 原文地址:https://www.cnblogs.com/zbtrs/p/7561741.html
Copyright © 2011-2022 走看看