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. 9种网页Flash焦点图和jQuery焦点图幻灯片

    jQuery图标放大轮播焦点图 Flash图片焦点图滑动切换 Flash右侧焦点图上下滑动切换 左右按钮滑动切换的网页幻灯片 双图同时滑动切换的焦点图 含有上下按钮的双图同时滑动切换的焦点图 常见的j ...

  2. canvas-star3

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. Python 简单的多线程聊天

    # client 端 import socket ip_port = ('127.0.0.1', 8091) sk = socket.socket() sk.connect(ip_port) prin ...

  4. RSA key format is not supported

    对接支付宝时,提示RSA错误 : 请仔细检查 : 创建支付对象时,关键字参数的名字 如果公私钥是以拼接路径的方式传递给AliPay,正确的关键字参数的名字应该如下 :

  5. Csharp: read Sybase SQL anywhere5.5 using c#

    private void button1_Click(object sender, EventArgs e) { try { //OdbcConnection conn = new OdbcConne ...

  6. 洛谷P3899 [湖南集训]谈笑风生(线段树合并)

    题意 题目链接 Sol 线段树合并板子题,目前我看到两种写法,分别是这样的. 前一种每次需要新建一个节点,空间是\(O(4nlogn)\) 后者不需要新建,空间是\(O(nlogn)\)(面向数据算空 ...

  7. 一些关于Viewport与device-width的东西~(转)

    内容转自 http://www.cnblogs.com/koukouyifan/p/4066567.html 非常感谢 口口一凡 为我们提供的这篇文章,受益匪浅,特地转到自己的博客收藏起来. 以下是原 ...

  8. LeanCloud云引擎相关问题

    (1).Windows 用户可以在 Github releases 页面 根据操作系统版本下载最新的 32 位 或 64 位 msi 安装包进行安装,安装成功之后在 Windows 命令提示符(或 P ...

  9. JVM、Gc工作机制详解

    JVM主要包括四个部分: 类加载器(ClassLoad) 执行引擎 内存区: 本地方法接口:类似于jni调本地native方法 内存区包括四个部分: 1.方法区:包含了静态变量.常量池.构造函数等 2 ...

  10. 安卓APP应用在各大应用市场上架方法整理

    想要把APP上架到应用市场都要先注册开发者账号才可以.这里的方法包括注册帐号和后期上架及一些需要注意的问题.注意:首次提交应用绝对不能随便删除,否则后面再提交会显示应用APP冲突,会要求走应用认领流程 ...