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. php 对象转数组

    //参考网上 但是别人给的方法有错误的地方public function eleme_callback(){ $res = (object) array('1' => 'foo'); $data ...

  2. Ubuntu 16.04 LTS 下安装 ibus-rime 输入法

    搜 Linux 下粤拼输入法的时候发现了 Rime,由于 fcitx 下的拼音输入体验实在不太好(搜狗是在我的电脑上完全坏掉了,调不出来,配置文件的问题一直没解决:谷歌是好过没有),于是安装 ibus ...

  3. JavaScript异步和单线程

    一,同步和异步的区别: 同步会阻塞代码执行,而异步不会.(比如alert是同步,setTimeout是异步) 二,前端使用异步的场景: 1,定时任务:setTimeout,setInterval 2, ...

  4. Ado.net 访问Oracle乱码问题

    之前安装Oracle - OraClient10g_home1客户端,用Ado.net访问没有问题,后来安装ODP之后,自动的又安装了Oracle - OraClient12Home1,之后就出现乱码 ...

  5. 【BI学习笔记】适合集成到项目里的BI:Wyn Enterprise

    近日,我收到葡萄城的邮件,讲葡萄城开始进军BI领域,发布了一套BI和报表工具,叫Wyn Enterprise. 之前了解过PowerBI等面向终端用户的BI工具,我发现BI工具与Wyn Enterpr ...

  6. TCP协议学习总结

    1.TCP协议通过三次握手建连接,四次挥手断连接. 2.TCP的定时器都有哪些? 做什么用途? 3.TCP的慢启动是什么意思? 4.TCP的快速重传是什么意思?

  7. 单元测试工具Junit浅谈

    什么是单元测试?   写了一个类和一些方法,给别人用,会不会有bug?那就测一下这些方法吧 怎么测?   用main方法测?不能一起运行,需要人为观察输出是否正确,测试效率低 单元测试能带来什么好处? ...

  8. 山西WebGIS项目总结

    有一段时间没写blog了,说实话,最近的心态一直在变化,看了一部日剧,回想了这一年所学所见,感觉生活目标变了. 做国土项目这段时间不是很忙,由于数据一直给不到位,时间拖得很久,所以在这期间也在继续学习 ...

  9. macOS 下NFS 文件系统挂载

    主要有两种方式: 使用:resvport选项, mount 挂载命令时. 使用:insecure选项, exportfs 文件配置时. sudo mount -o resvport IP:Addr b ...

  10. Windows结构化异常处理浅析

    近期一直被一个问题所困扰,就是写出来的程序老是出现无故崩溃,有的地方自己知道可能有问题,但是有的地方又根本没办法知道有什么问题.更苦逼的事情是,我们的程序是需要7x24服务客户,虽然不需要实时精准零差 ...