题目

Jerry 写下了一个只由非负整数和加减号组成的算式。

它想给这个算式添加合法的括号,使得算式的结果最大。


分析

考场\(O(n^3)\)伪部分分成功爆零,

设\(dp[i][j]\)表示前\(i\)个数中缺了\(j\)个右括号需要配对的最大结果,

那就考虑是加一个括号(第\(i\)个数前是负号)或不变或配对一个括号,

但是感性理解一下缺了三个或以上的右括号实际上可以被两个以内所代替

(三重否定为否定)。由于正数是可以合并的,所以括号是可以被拆开成两部分的

那么这道题就可以\(O(n)\)解决了


代码

#include <cstdio>
#include <cctype>
#define rr register
using namespace std;
const int N=100011; typedef long long lll;
int n,a[N],b[N]; lll dp[N][3];
inline signed iut(){
rr int ans=0; rr char c=getchar();
while (!isdigit(c)) c=getchar();
while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();
return ans;
}
inline lll max(lll a,lll b){return a>b?a:b;}
signed main(){
freopen("jerry.in","r",stdin);
freopen("jerry.out","w",stdout);
for (rr int T=iut();T;--T){
n=iut(),b[1]=0;
for (rr int i=1;i<=n;++i){
a[i]=iut();
if (i==n) continue;
rr char c=getchar();
while (c!='+'&&c!='-') c=getchar();
b[i+1]=(c=='-');
}
dp[0][0]=0,dp[0][1]=dp[0][2]=-1e18;
for (rr int i=1;i<=n;++i)
if (b[i]){
dp[i][0]=-1e18;//前面是负号强行加括号,所以不可能
dp[i][1]=max(max(dp[i-1][0],dp[i-1][1]),dp[i-1][2])-a[i];
dp[i][2]=max(dp[i-1][1],dp[i-1][2])+a[i];//变号
}else{
dp[i][0]=max(max(dp[i-1][0],dp[i-1][1]),dp[i-1][2])+a[i];
dp[i][1]=max(dp[i-1][1],dp[i-1][2])-a[i];//变号
dp[i][2]=dp[i-1][2]+a[i];//两次变号符号不变
}
printf("%lld\n",max(max(dp[n][0],dp[n][1]),dp[n][2]));
}
return 0;
}

#dp#NOIP2020.9.26模拟jerry的更多相关文章

  1. DP 01背包 七夕模拟赛

    问题 D: 七夕模拟赛 时间限制: 1 Sec  内存限制: 128 MB提交: 60  解决: 23[提交][状态][讨论版] 题目描述 " 找啊找啊找GF,找到一个好GF,吃顿饭啊拉拉手 ...

  2. 6.26模拟赛(1)总结(T1:信息传递;T2:传染病控制;T3:排列;T4:最大数)

    16:33:56 2020-06-26 当然可以先看一下成绩: 非常显然的成绩不能算有多好,当然其实这也可能是假期水课的报应  (额) 但是比我集训前想象的要好一点(集训时想象的是排名前30就可以,嗯 ...

  3. luogu P5470 [NOI2019]序列 dp 贪心 费用流 模拟费用流

    LINK:序列 考虑前20分 容易想到爆搜. 考虑dp 容易设\(f_{i,j,k,l}\)表示前i个位置 选了j对 且此时A选择了k个 B选择了l个的最大值.期望得分28. code //#incl ...

  4. BZOJ 3812 主旋律 (状压DP+容斥) + NOIP模拟赛 巨神兵(obelisk)(状压DP)

    这道题跟另一道题很像,先看看那道题吧 巨神兵(obelisk) 题面 欧贝利斯克的巨神兵很喜欢有向图,有一天他找到了一张nnn个点mmm条边的有向图.欧贝利斯克认为一个没有环的有向图是优美的,请问这张 ...

  5. JZOJ 6801. NOIP2020.9.19模拟patrick

    题目大意 动态维护数列中大于等于某个数的极长连续段的个数. 思路 我们考虑每段的开头,记为 \(i\),高度为 \(a_i\) 那么此时水淹的高度必然满足 \(a_{i-1} < x \leq ...

  6. JZOJ 6800.NOIP2020.9.19模拟spongebob

    题目大意 求形如 \[\sum_{i=1}^n |a_ix + b_i| \] 的最小值 思路 我们显然可以先把系数 \(a\) 提出来 于是就成了 \(\sum_{i=1}^n |a_i|·|x + ...

  7. [CQOI2016] 手机号码 (数位dp)

    link $solution:$ $10^{10} \leq L \leq R < 10^{11}$这个数据范围很容易想到数位$dp$. 依照题意模拟即可. #include<iostre ...

  8. Codeforces 918D MADMAX 图上dp 组合游戏

    题目链接 题意 给定一个 \(DAG\),每个边的权值为一个字母.两人初始各占据一个顶点(可以重合),轮流移动(沿着一条边从一个顶点移动到另一个顶点),要求每次边上的权值 \(\geq\) 上一次的权 ...

  9. HDU 5642 King's Order【数位dp】

    题目链接: http://bestcoder.hdu.edu.cn/contests/contest_showproblem.php?cid=677&pid=1003 题意: 求长度为n的序列 ...

  10. 多重背包 /// 单调队列DP oj1943

    题目大意: em.... 就是多重背包 挑战340页的东西 ...自己的笔记总结总是比较乱的 重点:原始的状态转移方程中 更新第 i 种物品时 重量%w[i] 的值不同 则它们之间是相互独立的: 1- ...

随机推荐

  1. 参数替换xargs

    由于很多命令不支持管道|来传递参数,xargs用于产生某个命令的参数,xargs可以读入stdin的数据,并且以空格符或回车符将stdin的数据分隔为参数 示例: 创建10个用户 echo user{ ...

  2. 在MATPool矩池云完成Pytorch训练MNIST数据集

    本文为矩池云入门手册的补充:Pytorch训练MNIST数据集代码运行过程. 案例代码和对应数据集,以及在矩池云上的详细操作可以在矩池云入门手册中查看,本文基于矩池云入门手册,默认用户已经完成了机器租 ...

  3. 【Azure Logic App】在Logic App中使用 Transfer XML组件遇见错误 undefined

    问题描述 在Azure Logic App中,使用Transform XML组件进行XML内容的转换,但是最近这个组件运行始终失败. 问题解答 点击Transform XML组件上的错误案例,并不能查 ...

  4. 【Azure Developer】在Azure Storage Account的两个Blob可以同步吗?可以跨订阅拷贝吗?

    问题描述 不同订阅下的Azure Storage Account中Blob资源可以同步吗? 解决方案 可以.通过Azure 官方推荐的Storage Account工具来完成 Copy/Paste 操 ...

  5. 【Azure 应用服务】App Service 的.NET Version选择为.NET6,是否可以同时支持运行ASP.NET V4.8的应用呢?

    问题描述 App Service 的.NET Version选择为.NET6,是否可以同时支持运行ASP.NET V4.8的应用呢? 问题解答 答案是可以的,Azure App Service .NE ...

  6. 【Azure 存储服务】关于对Azure Storage Account 的 Folder 权限管理和设定

    问题描述 在一个storage account下面有很多folder,需要对不同的folder设置不同的权限给到不同的用户来访问使用,怎么样设定比较合理? 问题解答 一:可以使用SAS共享访问签名进行 ...

  7. nftables语法及例子

    先上我自己实际测试通过的例子,用例子便于在实践中学习: # 0 --- 说明 ---下面例子中的单引号目的是为了避免nftable参数中的星号.花括号.分号等符号被shell展开解释掉了,导致nft命 ...

  8. 将windows上socket的client程序修改到linux上运行

    将windows上客户端程序修改到linux上运行 记录一下修改哪些地方 编译命令 文件夹的内容:包含了client.cpp mySocket.cpp mySocket.h until.h 链接在一起 ...

  9. clickhouse快速上手和问题记录

    clickhouse官方中文社区实战经验:手把手教你搭建单机clickhouse开发环境 我是用的是centOS7的虚拟机, 官方教程中的:sudo /etc/init.d/clickhouse-se ...

  10. 基于python的生理电信号采集的数据转换和处理软件

    一 前记 团队开发了几款生物电信号采集系统,可数据处理和转换工具刚开始用的都是matlab.这对一些客户来说,使用门槛还是有些高了.开发一套配套的软件,满足广大用户的需求,已经是迫在眉睫的事情了.最近 ...