众所周知,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。

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

這道題顯然是DP,而且很容易看出是三維的。

f[i][0,1,2,3][0,1],i是代表選取的第幾個妹子,0,1,2,3表示還可以選機隊妹子,0,1表示當前的妹子選不選。

傻傻的不會推DP方程,於是,就算當前的妹子加上前一個序號的某個f等於什麼。

s[i]+f[i-][][]=f[i][][];
s[i]+f[i-][][]=f[i][][];
s[i]+f[i-][][]=f[i][][];
s[i]+f[i-][][]=f[i][][];
s[i]+f[i-][][]=f[i][][];
s[i]+f[i-][][]=f[i][][];

然后,倒過來,順便加上f[?][?][0]=?.(顯然,f[?][3][0]只能等於0,所以我就換成0了,又因為f[?][3][1]不存在,於是順便給第二維壓縮了一下。)

f[i][][]=max(s[i],s[i]+f[i-][][]);
f[i][][]=max(f[i-][][],f[i-][][]);
f[i][][]=max(s[i]+f[i-][][],s[i]+f[i-][][]);
f[i][][]=max(f[i-][][],f[i-][][]);
f[i][][]=max(s[i]+f[i-][][],s[i]+f[i-][][]);
f[i][][]=max(f[i-][][],f[i-][][]);
因為某些原因,還要把“lld”和“I64d”重定義為LL(這個是什麼不重要)。
#ifdef unix
#define LL "%lld"
#else
#define LL "%I64d"
#endif
為了節約空間,我順便把第一維壓縮了,從n到2,代碼裡的b,c,%2就是關鍵。

代碼實現:

 #include<cstdio>
#include<iostream>
#ifdef unix
#define LL "%lld"
#else
#define LL "%I64d"
#endif
using namespace std;
long long n,a,b,c,f[][][];
int main(){
freopen("jx.in","r",stdin);
freopen("jx.out","w",stdout);
scanf(LL,&n);
for(int i=;i<=n;i++){
scanf(LL,&a);
b=(i-)%;c=i%;
f[c][][]=max(a,a+f[b][][]);
f[c][][]=max(f[b][][],f[b][][]);
f[c][][]=max(a+f[b][][],a+f[b][][]);
f[c][][]=max(f[b][][],f[b][][]);
f[c][][]=max(a+f[b][][],a+f[b][][]);
f[c][][]=max(f[b][][],f[b][][]);
}
printf(LL"\n",max(f[n%][][],f[n%][][]));
return ;
}

吐槽一下,我1~n cin流讀入只得了60分(那四十分T了)。

某种数列问题 (jx.cpp/c/pas) 1000MS 256MB的更多相关文章

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

    题目描述 众所周知,chenzeyu97有无数的妹子(阿掉!>_<),而且他还有很多恶趣味的问题,继上次纠结于一排妹子的排法以后,今天他有非(chi)常(bao)认(cheng)真(zhe ...

  2. [noip模拟赛]某种数列问题<dp>

    某种数列问题  (jx.cpp/c/pas) 1000MS 256MB 众所周知,chenzeyu97有无数的妹子(阿掉!>_<),而且他还有很多恶趣味的问题,继上次纠结于一排妹子的排法以 ...

  3. 模拟赛 Problem 2 不等数列(num.cpp/c/pas)

    Problem 2 不等数列(num.cpp/c/pas) [题目描述] 将1到n任意排列,然后在排列的每两个数之间根据他们的大小关系插入“>”和“<”.问在所有排列中,有多少个排列恰好有 ...

  4. 洛谷——P2071 座位安排 seat.cpp/c/pas

    P2071 座位安排 seat.cpp/c/pas 题目背景 公元二零一四年四月十七日,小明参加了省赛,在一路上,他遇到了许多问题,请你帮他解决. 题目描述 已知车上有N排座位,有N*2个人参加省赛, ...

  5. 2012_p2 寻宝 (treasure.cpp/c/pas)

    2012_p2 寻宝 (treasure.cpp/c/pas) 时间限制: 1 Sec  内存限制: 128 MB提交: 23  解决: 9[提交][状态][讨论版][命题人:外部导入] 题目描述 2 ...

  6. 2012_p1 质因数分解 (prime.cpp/c/pas)

    2012_p1 质因数分解 (prime.cpp/c/pas) 时间限制: 1 Sec  内存限制: 128 MB提交: 80  解决: 27[提交][状态][讨论版][命题人:外部导入] 题目描述 ...

  7. 模拟赛 Problem 3 经营与开发(exploit.cpp/c/pas)

    Problem 3 经营与开发(exploit.cpp/c/pas) [题目描述] 4X概念体系,是指在PC战略游戏中一种相当普及和成熟的系统概念,得名自4个同样以“EX”为开头的英语单词. eXpl ...

  8. 模拟赛 Problem 1 高级打字机(type.cpp/c/pas)

    Problem 1 高级打字机(type.cpp/c/pas) [题目描述] 早苗入手了最新的高级打字机.最新款自然有着与以往不同的功能,那就是它具备撤销功能,厉害吧. 请为这种高级打字机设计一个程序 ...

  9. 洛谷 P2071 座位安排 seat.cpp/c/pas

    P2071 座位安排 seat.cpp/c/pas 题目背景 公元二零一四年四月十七日,小明参加了省赛,在一路上,他遇到了许多问题,请你帮他解决. 题目描述 已知车上有N排座位,有N*2个人参加省赛, ...

随机推荐

  1. SQL CAST, CONVERT 比较

    本文转自:http://www.cnblogs.com/denylau/archive/2010/12/01/1893371.html if (@StartTime > @EndTime)    ...

  2. Java注解配置

    Java注解是附加在代码中的一些元信息,用于一些工具在编译.运行时进行解析和使用,起到说明.配置的功能.注解不会也不能影响代码的实际逻辑,仅仅起到辅助性的作用.包含在 java.lang.annota ...

  3. iOS闪烁效果工具 GlitchLabel

    GlitchLabel 用于给文字添加闪烁效果,效果图如下: 开发环境: iOS 7.0+ Swift 2.2 Xcode 7 示例代码:https://www.yuedecaifu.com 1 2 ...

  4. hibernate缓存和提高效率

    1.使用二级缓存,多把大批量的.短期多次的查询数据存到二级缓存中,避免和数据库的多次交互,增加负担.二级缓存加在那些增删改少的,查询多的类中.二级缓存的是对象,如果查出来的不是对象,不会放到缓存中去. ...

  5. the way of reading English books

    除了datesheet ,我们经常遇到英语文档和资料.找到正确的英语文档的打开方式变的非常必要. 计算机类的书大致归为三大类: (1)语言方面的书.比如C.Java.Python等等 (2)算法书籍. ...

  6. BZOJ 3782 上学路线

    首先这个题需要dp.dp[i]=C(x[i]+y[i],x[i])-Σdp[j]*C(x[i]-x[j]+y[i]-y[j],x[i]-x[j])(x[i]>=x[j],y[i]>=y[j ...

  7. Tips about Object-oriented programming

    1, Return subinterface For example, we have a parent interface: public interface A<T extends A< ...

  8. Python 练习册--生成唯一激活码(邀请码)

    题目是这样子的: 做为 Apple Store App 独立开发者,你要搞限时促销,为你的应用生成激活码(或者优惠券),使用 Python 如何生成 200 个激活码(或者优惠券)? 分析 其实要生成 ...

  9. java作业2

    (一) 仔细阅读示例: EnumTest.java,运行它,分析运行结果? 你能得到什么结论?你掌握了枚举类型的基本用法了吗? 结论:枚举不属于原始数据类型,它的每个具体值都引用一个特定的对象.相同的 ...

  10. 微信OAuth2网页授权

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using YTO.WeiX ...