【Codeforces 115D】Unambiguous Arithmetic Expression
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的更多相关文章
- 【codeforces 604D】Moodular Arithmetic
time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...
- 【codeforces 415D】Mashmokh and ACM(普通dp)
[codeforces 415D]Mashmokh and ACM 题意:美丽数列定义:对于数列中的每一个i都满足:arr[i+1]%arr[i]==0 输入n,k(1<=n,k<=200 ...
- 【51.27%】【codeforces 604A】Uncowed Forces
time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...
- 【39.29%】【codeforces 552E】Vanya and Brackets
time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...
- 【codeforces 707E】Garlands
[题目链接]:http://codeforces.com/contest/707/problem/E [题意] 给你一个n*m的方阵; 里面有k个联通块; 这k个联通块,每个连通块里面都是灯; 给你q ...
- 【codeforces 707C】Pythagorean Triples
[题目链接]:http://codeforces.com/contest/707/problem/C [题意] 给你一个数字n; 问你这个数字是不是某个三角形的一条边; 如果是让你输出另外两条边的大小 ...
- 【codeforces 709D】Recover the String
[题目链接]:http://codeforces.com/problemset/problem/709/D [题意] 给你一个序列; 给出01子列和10子列和00子列以及11子列的个数; 然后让你输出 ...
- 【codeforces 709B】Checkpoints
[题目链接]:http://codeforces.com/contest/709/problem/B [题意] 让你从起点开始走过n-1个点(至少n-1个) 问你最少走多远; [题解] 肯定不多走啊; ...
- 【codeforces 709C】Letters Cyclic Shift
[题目链接]:http://codeforces.com/contest/709/problem/C [题意] 让你改变一个字符串的子集(连续的一段); ->这一段的每个字符的字母都变成之前的一 ...
随机推荐
- 实现Java Socket 客户端服务端交互实例
SocketService.java package socket; import java.io.BufferedReader; import java.io.IOException; import ...
- Easyui-textbox得到焦点方法
得到焦点是我们在编写前台时经常使用到的,为了提高用户的体验度,话不多说直接上代码. jsp页面: <div class="box_xian"> <span cla ...
- (三)Sass和Compass--制作精灵图片
6.1 精灵的工作原理 // 将各种图片合并到一张图片里面,并在不同的状态下改变背景图片的位置; 6.2 精灵的重要性 // 压缩图片的内存; // 减少HTTP请求 6.2.3 Compass处理精 ...
- 使用普通用户执行 docker
CentOS 版本 7.4,Docker 版本 docker-1.13 及以下 ll /var/run/docker.sock srw-rw----. 1 root root 0 May 25 14: ...
- 【读书笔记】iOS-iOS视频
视频多媒体文件主要是存放视频数据信息,视频数据量要远远大于音频数据文件,而且视频编码和解码算法非常复杂,因此早期的计算机由于CPU处理能力差,要采用视频解压卡硬件支持,视频采集和压缩也要采用硬件卡.按 ...
- MySQL高可用方案--MHA原理
简介 MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于Facebook公司)开发,是日 ...
- linux编写.sh脚本并赋权限
今日打包编译项目时,发现缺少一个git pull更新项目的脚本,所以在linux编写了一个gitpull.sh脚本,能够实现更新项目的需求. 1.首先vi gitpull.sh或者使用vim编辑器. ...
- 9.4、__del__、__doc__、__dict__、__module__、__getitem__、__setitem__、__delitem__、__str__、__repr__、__call__
相关内容: __del__.__doc__.__dict__.__module__.__getitem__.__setitem__.__delitem__.__str__.__repr__.__cal ...
- Vue2 框架开发的单页程序页面首次加载慢的原因与优化方案
在用Vue2 框架进行单页面开发时,开发完成后项目打包到线上环境,发现vendor脚本有963K,app.css文件也有四百多k,用户第一次打开网页加载这两个文件要十多秒,会使页面白屏十多秒,之后再次 ...
- 使用 WebStorm IDE 调试 Pomelo 应用程序
使用得心应手的IDE来开发应用程序,可以使我们的工作事半功倍.而调试则更可以让我们准确的定位BUG,发现问题.本文讲述如何使用 WebStorm 这个怪兽级JavaScript IDE来调试 Chat ...