Codeforces 115 D

题意:给一个没有括号的表达式,问有多少种添加括号的方法使得这是一个合法的表达式?输入可能有正负号、加减乘除、数字。

思路1:

这是不能过的\(naive\)的\(dp\)。

考虑\(dp(l,r)\)表示从第\(l\)个字符到第\(r\)个字符有多少种添加括号的方法。

转移的时候就枚举当前最后一次运算。

思路2:

这是\(tourist\)的神奇\(dp\)。

考虑\(dp(i,j)\)表示第\(i\)个正负符号到第\(j\)个连续符号段连着的那个数字有多少种添加括号的方法。

转移的时候是枚举最后一次运算时哪一个连续符号段的第一个(因为只有这一个是二元运算符

那么就发现我们需要记录一个从连续符号段的第一个到连续符号段的第一个正负符号的映射,记为\(st\)。

然后从\(dp(i,k)\times dp(st_{k+1},j)\)转移来。

这样就三方出奇迹了。(%%% \(tourist\))

思路3:

这是\(shik\)的神奇记忆化搜索。

首先我们把原输入变成以下段:

  • 连续数字:0
  • 正负(加减)符号:1
  • 乘除符号:2

那么考虑\(dp(i,j)\)表示到了第\(i\)个段,打开的左括号有\(j\)个,有多少种方法。

然后考虑转移。

假如这个位置是连续数字,那么可以合上一些括号或者不合上。

否则就必须打开一个括号。

最后答案是\(dp(n,0)\)。

(话说1和2只是用来判无解的。。。

思路4:

这是ACRush的神奇三方DP。

按照shik的方法分段。

直接考虑\(dp(i,j)\)表示从第\(i\)段到第\(j\)段的答案。

然后转移的时候就是枚举中间那一个字符的位置,然后左右答案乘起来一加就可以了。

思路5:

这是\(Al.cash\)的和\(shik\)差不多的方法。

两人的状态是一样的,但是\(Al.cash\)用了前缀和来搞每次合上很多符号的操作对\(dp\)的影响。

思路6:

这是最难看懂的\(chenlijie\)神仙的方法。

首先把所有的连续符号段中的正负符号个数放到v数组中,

然后用一个\(dp\)的\(vector\)存下所有的\(dp\)值,

从后往前枚举v,对于每一个v,dp的前v+1个代表的是倒数的第*个正负字符到最后的答案。

然后把它们删掉,后面的内容做一次前缀和就竟然可以转移了!?

这。。。

感觉之前想的也不太对了。。。

其实是在思路1中\(dp\)每一次更新当前区间的时候加上的东西之和正好是后一个位置到结尾的答案。。。

这肯定是打表打出来的

思路7:

NuM的,基本同ACRush。

把这些写完后一发交上去只过了一个。。。

其它的都是由于一个特殊情况没有考虑到:

如果第一个字母是乘号或者除号,那么无解

所以两个WA,两个RE。

然后第二发全过了。

【Codeforces 115D】Unambiguous Arithmetic Expression的更多相关文章

  1. 【codeforces 604D】Moodular Arithmetic

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  2. 【codeforces 415D】Mashmokh and ACM(普通dp)

    [codeforces 415D]Mashmokh and ACM 题意:美丽数列定义:对于数列中的每一个i都满足:arr[i+1]%arr[i]==0 输入n,k(1<=n,k<=200 ...

  3. 【51.27%】【codeforces 604A】Uncowed Forces

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  4. 【39.29%】【codeforces 552E】Vanya and Brackets

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  5. 【codeforces 707E】Garlands

    [题目链接]:http://codeforces.com/contest/707/problem/E [题意] 给你一个n*m的方阵; 里面有k个联通块; 这k个联通块,每个连通块里面都是灯; 给你q ...

  6. 【codeforces 707C】Pythagorean Triples

    [题目链接]:http://codeforces.com/contest/707/problem/C [题意] 给你一个数字n; 问你这个数字是不是某个三角形的一条边; 如果是让你输出另外两条边的大小 ...

  7. 【codeforces 709D】Recover the String

    [题目链接]:http://codeforces.com/problemset/problem/709/D [题意] 给你一个序列; 给出01子列和10子列和00子列以及11子列的个数; 然后让你输出 ...

  8. 【codeforces 709B】Checkpoints

    [题目链接]:http://codeforces.com/contest/709/problem/B [题意] 让你从起点开始走过n-1个点(至少n-1个) 问你最少走多远; [题解] 肯定不多走啊; ...

  9. 【codeforces 709C】Letters Cyclic Shift

    [题目链接]:http://codeforces.com/contest/709/problem/C [题意] 让你改变一个字符串的子集(连续的一段); ->这一段的每个字符的字母都变成之前的一 ...

随机推荐

  1. Jedis工具类代码

    安装Redis可以参考 https://www.cnblogs.com/dddyyy/p/9763098.html Redis的学习可以参考https://www.cnblogs.com/dddyyy ...

  2. 解说css中的margin属性缩写方式

    <html> <body> <div style="border: 1px solid red;"> <div style="b ...

  3. ES6学习之变量的解构赋值

    前言:什么是ES6?ECMAScript 6(简称ES6)是JavaScript语言的下一代标准,已经在2015年6月正式发布了.其中相比较于ES5新增了诸多的特性,并且ES6可转换为ES5的语法.- ...

  4. Core Animation-2:寄宿图

    #寄宿图 >图片胜过千言万语,界面抵得上千图片  ——Ben Shneiderman 我们在第一章『图层树』中介绍了CALayer类并创建了一个简单的有蓝色背景的图层.背景颜色还好啦,但是如果它 ...

  5. 将 Azure VM 迁移到 Azure 中的托管磁盘

    Azure 托管磁盘无需单独管理存储帐户,从而简化了存储管理. 还可以将现有的 Azure VM 迁移到托管磁盘,以便受益于可用性集中 VM 的更佳可靠性. 它可确保可用性集中不同 VM 的磁盘完全相 ...

  6. Azure 标准与高级托管磁盘存储的相互转换

    托管磁盘提供两种存储选项:高级(基于 SSD)和标准(基于 HDD). 它允许基于性能需求在这两个选项之间轻松切换,并保障最短停机时间. 非托管磁盘不具备此功能. 但可以轻松转换为托管磁盘,以便在这两 ...

  7. Pyhon环境变量的一些坑

    在正常的情况下,使用编译器执行Python文件,无需考虑环境变量的改变 例:sum --one --one1.py --two --two1.py 在执行one.py文件需要调用 two.py中某个方 ...

  8. Windows 系统光盘刻录教程-光盘怎样刻录?刻录数据光盘用"轨道一次写入"还是"光盘一次写入"?

    刻录光盘需要 DVD-RW 的光驱,并且光盘需要 DVD-R 的光盘用于刻录.刻录工具可以使用https://cn.ultraiso.net/ 来进行刻录.选择软件目录 中 工具 ,选择 刻录光盘映像 ...

  9. 阵列卡raid H730写策略write-through和write-back配置说明

    问题描述: 最近公司新进了测试服务器,但是在做阵列的时候忘记写策略里面的配置意思了 就网上查了一下,然后顺便做个笔记记录一下 write-through 数据在写入存储的同时,要写入缓存,这种方式安全 ...

  10. February 4th, 2018 Week 6th Sunday

    Hope clouds observation. 心怀希望会蒙蔽双眼,影响判断. Almost every of us thinks we would be the master of our liv ...