某种数列问题 (一场欢乐赛的T2)

  

  个人觉得挺难的一道DP题

  不会

  没有思路

  于是去找的正解

  于是。。

  

#include <iostream>
#include <cstring>
#define Max 1000010
using namespace std;
int N;
int number [Max];
int dp [Max][4][2];  // dp[i][j][1 or 0] 表示是第i个妹子  在第j段   0表示不放  1表示放
inline int max (int a, int b)
{
    return a > b ? a : b;
}
int main()
{
    ios :: sync_with_stdio (false);
    cin >> N;
    for (int i = 1; i <= N; i++)
        cin >> number [i];
    for (int i = 1; i <= N; i++)  // 枚举每个妹子
        for (int j = 0; j <= 3; j++)  // 枚举 每一段
        {
            dp [i][j][0] = max (dp [i - 1][j][0], dp[i - 1][j][1]);
            /* 表示的是 第i个妹子 在第 j段不放的价值  等与前一个妹子在第j段放 or 不放的价值取大 */
            if (j != 0)    dp [i][j][1] = max (dp [i - 1][j - 1][0], dp [i - 1][j - 1][1]) + number [i];
            /* 第0段(即j = 0 ) 表示的是 割过几个 妹子的价值*/
            /* 如果不是第0段  那个当前妹子放入第j段的价值就是 前一个妹子放或不放入第 j 段的价值取大 */
            dp [i][j][1] = max (dp [i][j][1], dp [i - 1][j][0] + number [i]);
            /* 第i个妹子放在第j段 的价值为当前价值 与 前一个妹子不放在第j段 于是另开一段后新加上当前妹子的价值*/
        }
    int Answer = max (dp [N][3][1], dp [N][3][0]);
    cout << Answer;
    return 0;
}
时间: 2024-10-12 04:07:21

某种数列问题 (一场欢乐赛的T2)的相关文章

[noip模拟赛]某种数列问题&lt;dp&gt;

某种数列问题  (jx.cpp/c/pas) 1000MS 256MB 众所周知,chenzeyu97有无数的妹子(阿掉!>_<),而且他还有很多恶趣味的问题,继上次纠结于一排妹子的排法以后,今天他有非(chi)常(bao)认(cheng)真(zhe)去研究一个奇怪的问题.有一堆他的妹子站成一排,然后对于每个妹子有一个美丽度,当然美丽度越大越好,chenzeyu97妹子很多,但是质量上不容乐观,经常出现很多美丽度为负数的妹子(喜闻乐见),chenzeyu97希望从一排妹子里找出3队连续的妹子,

欢乐赛解题报告

~~一场不欢乐的欢乐赛 时间分配::T1做的时候还可以,大约三十分钟写了个深搜(鬼知道我为啥不用广搜,大概是因为快半个月没写了)写完后去研究第二题,刚开始以为是贪心,很快写了出来,但是自己推了一会举出了反例.于是自己想了很多方法,但是都是基于贪心,写了一个多小时,写炸了,没办法又改成了贪心.第三题并不会,然后搜索大法过了一个点,(输出-1也是一个点) 整体感觉::还是太弱,T1是会的,但是还是没做对,大概是独立做题少的缘故吧,平常做题都没有思考太多时间.T2贪心T3暴力,貌似自己啥都不会.到现在

综合-某假期欢乐赛 (Apri, 2018)

假期欢乐赛,确实挺轻松的,被逼迫写了题解. A.推数按列观察,有的列有多个格子,看起来好复杂啊,先放一放.按行观察,黑色格子在 i 行 j 列:当 i 是奇数,对应数字第 i 位是 j-1当 i 是偶数,对应数字第 i 位是 9-j B.体重某位同学不是中间体重的充要条件是,比他重的人数 >= mid 或 比他轻的人数 >= midx 比 y 重,则 x, y 有单向连通关系,G[x][y] = true .比 y 重的人数就是满足 G[i][y] = true 的 i 的数量.比 y 轻的人

某种数列问题

某种数列问题  (jx.cpp/c/pas) 1000MS 256MB 众所周知,chenzeyu97有无数的妹子(阿掉!>_<),而且他还有很多恶趣味的问题,继上次纠结于一排妹子的排法以后,今天他有非(chi)常(bao)认(cheng)真(zhe)去研究一个奇怪的问题.有一堆他的妹子站成一排,然后对于每个妹子有一个美丽度,当然美丽度越大越好,chenzeyu97妹子很多,但是质量上不容乐观,经常出现很多美丽度为负数的妹子(喜闻乐见),chenzeyu97希望从一排妹子里找出3队连续的妹子,

10-4国庆节第七场模拟赛题解

10-4 国庆节第七场模拟赛题解 T1工厂 (factory) 水 #include<iostream> #include<cstdio> #define int long long using namespace std; inline int read(){ int sum=0,f=1; char ch=getchar(); while(ch<'0'||ch>'9'){ if(ch=='-')f=-1; ch=getchar(); } while(ch>='0

Comet OJ - 2019 六一欢乐赛

传送门 #A: 思路:等差数列求和,看成俩次1+2+…+ n,多加的n减去,所以 ans = n*(n+1) - n. AC代码: 1 #include<iostream> 2 #include<algorithm> 3 #include<string> 4 using namespace std; 5 int main() 6 { 7 int n; 8 while(cin >> n) 9 { 10 cout << n*(n+1) - n <

NOIP模拟赛 某种数列问题

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

【一场模拟赛?】

JSH师兄来讲课,于是也弄了场比赛给我们做...被虐... A.简单的图论题 嗯求一个拓扑图中每个点的可达点数量,n=10000 嗯记忆化搜索,但是有可能搜到重复的点,于是我们不搜索可达点数量,转成搜索可达点集,这个可以用一个bool数组记录. 于是STL有某种东西叫做bitset(长知识 // Problem#: 14938 // Submission#: 3794800 // The source code is licensed under Creative Commons Attribu

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

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