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. 集合类--最详细的面试宝典--看这篇就够用了(java 1.8)

    看了一个星期源码,搜索上百篇博文,终于总结出了集合类的所有基础知识点,学集合,看这篇就够用了!!! 篇幅有点长, 如果你能全部理解,java最重要的集合就不怕了,秒过面试!!!(本篇素材来自网络,如有 ...

  2. java获取文件路径

    情况:工程项目没有放到tomcat下,在eclipse运行 1.获取项目根目录,根据在哪里运行 2. 3.从最终生成的.class文件为着手点 4.在controller下

  3. css中元素border属性的构成以及配合属性值transparent可得到一些特殊形状1.0

    css中我们经常使用到元素的border属性和属性值transparent,可能好多人还不太了解border的构成以及配合transparent的一些效果: 1.border的构成如下所示:   ht ...

  4. SSM环境搭建

    流程 1,maven 依赖 2,spring 配置文件 3,mybatis 配置文件 4,springMVC 配置文件 5,web.xml pom依赖 1,定义版本 <properties> ...

  5. 【转】解决CentOS 64位系统vsftpd 530 login incorrect的问题

    转自:http://www.centos.bz/2011/12/centos-64-install-vsftpd-530-login-incorredct/ 今天在centos 6 64位测试安装vs ...

  6. Application.Current的使用

    来源 http://www.cnblogs.com/symons/archive/2010/03/15/1686200.html Application.Current的使用 WPF程序对应一个App ...

  7. (网页)12种不宜使用的Javascript语法(转)

    转自阮一峰: 最近写的一些小东西,总是出各种各样的问题,用了angular.js反应居然比我的jQuery还慢,客户吐槽了,我又把一个小操作,改成了jQuery.浏览一下大神的的博客.转载一点东西: ...

  8. node webpack4.6简单配置

    package.json { "name": "his-web", "version": "0.0.0", " ...

  9. WebDriverTest

    using OpenQA.Selenium.Firefox; using System; using System.Collections.Generic; using System.Linq; us ...

  10. 第五章 绘图基础(LINEDEMO)

    LINEDEMO程序绘制一个矩形.两条直线.一个椭圆和一个圆角矩形.该程序表明,定义了封闭矩形的这些函数确实对这些区域进行了填充,因为椭圆后面的线被隐藏了. /*------------------- ...