20180418模拟赛T1——Seq
Seq
(seq.cpp/c/pas)
题目描述 Description
木吉要去征讨VAN様,所以他现在需要从他身边的人中选出若干位陪同。现在有\(n\)个人站成一行,木吉要从其中选出\(2\)批在这一行中连续的人(不能不选),且一个人不能两次都被选。每位人有一个战斗力\(A_i\),\(A_i\)可正可负。木吉团队的战斗力即为选择的人的\(A_i\)之和。
现在木吉想要知道最大的战斗力是多少。
输入描述 Input Description (seq.in)
第一行为人数\(n\),第二行为\(n\)个整数依次为\(A_1,A_2,\cdots,A_n\)
输出描述 Output Description (seq.out)
一个整数,即为最大的战斗力之和
样例输入 Sample Input
6
10 -5 6 0 0 1
样例输出 Sample Output
17
样例解释 Sample Interpretation
第一批只选第一个人,第二批选第三、四、五、六个人
数据范围 Data Size
对于\(30\%\)的数据,\(n\le 50\),\(A_i\)的绝对值不超过\(1000\)
对于\(60\%\)的数据,\(n\le 5000\),\(A_i\)的绝对值不超过\(100000\)
对于\(100\%\)的数据,\(n\le 100000\),\(A_i\)的绝对值不超过\(1000000000\)
题解
这张试卷中的人物名有点毒瘤
一眼看是一道dp,于是开始大力转移。
由于是分两批,于是想到需要分段处理。
第\(i\)号位置为最右端点的方案中最大战斗力为\(ll[i]\),同理定义\(rr[i]\)。
那么显然有:\(ll[i]=x[i]+max(ll[i-1],0),rr[i]=x[i]+max(rr[i+1],0)\)(贪心一下即可:如果前一位的最大值大于0,那么就加上前一位;否则就不加)。
设\(lll[i]\)为前\(i\)位的最优方案,同理定义\(rrr[i]\)(好吧我承认我的变量名有毒)。
于是我们就可以很容易地推出:\(lll[i]=max(lll[i-1],ll[i]),rrr[i]=max(rrr[i+1],rr[i])\)(选与不选第\(i\)位)。
最终,我们枚举断点(分成两段处理,取最大值):\(ans=max(ans,lll[i]+rrr[i+1])\)。
代码如下
#include <cstdio>
#include <cctype>
#include <iostream>
using namespace std;
typedef long long LL;
#define dd c=getchar()
inline void read(LL& x)
{
x=0;int dd;bool f=false;
for(;!isdigit(c);dd)if(c=='-')f=true;
for(;isdigit(c);dd) x=(x<<1)+(x<<3)+(c^48);
if(f)x=-x;return;
}
#undef dd
const LL INF=0x3f3f3f3f3f3f3f3f;
const LL maxn=100005;
LL ll[maxn],rr[maxn];
LL lll[maxn],rrr[maxn];
LL x[maxn];
int main()
{
freopen("seq.in","r",stdin);
freopen("seq.out","w",stdout);
LL n;read(n);
lll[0]=rrr[n+1]=-INF;
for(LL i=1;i<=n;++i)
{
read(x[i]);
ll[i]=x[i]+max(ll[i-1],0LL);
}
for(LL i=n;i;--i)
rr[i]=x[i]+max(rr[i+1],0LL);
LL ans=-INF;
for(LL i=1;i<=n;++i)
lll[i]=max(lll[i-1],ll[i]);
for(LL i=n;i;--i)
rrr[i]=max(rrr[i+1],rr[i]);
for(int i=1;i<n;++i)
ans=max(ans,lll[i]+rrr[i+1]);
printf("%lld",ans);
fclose(stdin);
fclose(stdout);
return 0;
}
20180418模拟赛T1——Seq的更多相关文章
- 【洛谷比赛】[LnOI2019]长脖子鹿省选模拟赛 T1 题解
今天是[LnOI2019]长脖子鹿省选模拟赛的时间,小编表示考的不怎么样,改了半天也只会改第一题,那也先呈上题解吧. T1:P5248 [LnOI2019SP]快速多项式变换(FPT) 一看这题就很手 ...
- 20180610模拟赛T1——脱离地牢
Description 在一个神秘的国度里,年轻的王子Paris与美丽的公主Helen在一起过着幸福的生活.他们都随身带有一块带磁性的阴阳魔法石,身居地狱的魔王Satan早就想着得到这两块石头了,只要 ...
- NOIP欢乐模拟赛 T1 解题报告
小澳的方阵 (matrix.cpp/c/pas) [题目描述] 小澳最近迷上了考古,他发现秦始皇的兵马俑布局十分有特点,热爱钻研的小澳打算在电脑上还原这个伟大的布局. 他努力钻研,发现秦始皇布置兵马俑 ...
- [模拟赛] T1 高级打字机
Description 早苗入手了最新的高级打字机.最新款自然有着与以往不同的功能,那就是它具备撤销功能,厉害吧. 请为这种高级打字机设计一个程序,支持如下3种操作: 1.T x:在文章末尾打下一个小 ...
- 2019.2.25 模拟赛T1【集训队作业2018】小Z的礼物
T1: [集训队作业2018]小Z的礼物 我们发现我们要求的是覆盖所有集合里的元素的期望时间. 设\(t_{i,j}\)表示第一次覆盖第i行第j列的格子的时间,我们要求的是\(max\{ALL\}\) ...
- [NOIP2018校模拟赛]T1 阶乘
题目: 描述 有n个正整数a[i],设它们乘积为p,你可以给p乘上一个正整数q,使p*q刚好为正整数m的阶乘,求m的最小值. 输入 共两行. 第一行一个正整数n. 第二行n个正整数a[i]. 输出 共 ...
- [NOIP2018校模拟赛]T1聚会 party
题目链接: 聚会 分析: 设每个点到1号点的距离为dist_{i},每个点的权值为x_{i},目标点到1号点的距离为dist,权值为x,那么对于每一次查询,我们讨论三种情况: ① 目标家庭在区间左边( ...
- 【2019.8.15 慈溪模拟赛 T1】插头(plugin)(二分+贪心)
二分 首先,可以发现,最后的答案显然满足可二分性,因此我们可以二分答案. 然后,我们只要贪心,就可以验证了. 贪心 不难发现,肯定会优先选择能提供更多插座的排插,且在确定充电器个数的情况下,肯定选择能 ...
- 【2019.7.20 NOIP模拟赛 T1】A(A)(暴搜)
打表+暴搜 这道题目,显然是需要打表的,不过打表的方式可以有很多. 我是打了两个表,分别表示每个数字所需的火柴棒根数以及从一个数字到另一个数字,除了需要去除或加入的火柴棒外,至少需要几根火柴棒. 然后 ...
随机推荐
- 【C/C++开发】C++11 并发指南三(std::mutex 详解)
本系列文章主要介绍 C++11 并发编程,计划分为 9 章介绍 C++11 的并发和多线程编程,分别如下: C++11 并发指南一(C++11 多线程初探)(本章计划 1-2 篇,已完成 1 篇) C ...
- python 将列表里的字典元素合并为一个字典
python 将列表里的字典元素合并为一个字典 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn. ...
- golang 使用 protobuf 的教程
1.下载protobuf的编译器protoc 地址: https://github.com/google/protobuf/releases window: 下载: protoc-3.3.0-w ...
- Linux中常用命令cat
cat可谓是随处可用,全名:concatenate and print files.用于连接和打印文件,按序读取文件内容,然后输出到标准输出.如果文件是单个破折号-或者缺乏文件,cat将读取标准输入. ...
- java自定义异常和throw、throws的使用
一.自定义异常类 我们知道所有的异常都是Exception,所以我们需要自定义异常只需要继承那个Exception类就可以了.下面我们自定义一个异常类,代码如下: /** * 自定义异常, */ // ...
- 核与线程 CPU 4核8线程 的解释
1.物理CPU: 物理CPU就是计算机上实际配置的CPU个数.在linux上可以打开cat /proc/cpuinfo 来查看,其中的physical id就是每个物理CPU的ID,能找到几个phys ...
- 创建.net framework webapi出现“Web 服务器被配置为不列出此目录的内容。”错误
接了一个新任务,要求写一个web api.于是我创建了一个.net framework的web api,结果在运行的时候,出现了以下页面: 解决方法: 在web.config文件中添加<dire ...
- Vue--基础2
目录 Vue--基础2 vue成员获取 分隔符成员 计算属性成员 什么是计算属性 计算属性的用法 注意: 监听属性成员 组件 组件的介绍 组件的优点: 局部组件 全局组件 组件复用的数据隔离 组件之间 ...
- 谈谈游戏服务端SDK接入
“接sdk其实本质上就是一个对着接口文档写adaptor的工作,重复和无味.” 团队减员,身负多职,上一次调SDK已经可以回溯到游戏测试前夕了... 一般SDK只包含验证和支付功能,绝少部分SDK包含 ...
- 手表WACCHE单词WACCHE腕表
中文名:手表 外文名:watch,wacche 佩戴部位:手腕 拼音:shǒu biǎo 含义 1.戴在手腕上的小型计时器. 茅盾<夏夜一点钟>:“‘哼哼,这家伙!骗人的!’--她本能地校 ...