题目描述:

给定一个初始为空的栈,和n个操作组成的操作序列,每个操作只可能是出栈或者入栈。
要求在操作序列的执行过程中不会出现非法的操作,即不会在空栈时执行出栈操作,同时保证当操作序列完成后,栈恰好为一个空栈。
求符合条件的操作序列种类。
例如,4个操作组成的操作序列符合条件的如下:
入栈,出栈,入栈,出栈
入栈,入栈,出栈,出栈
共2种。

思路

1. Leetcode 上有道类似的题目, 那道题求得是括号的总类, 当初用的是搜索法

2. 搜索法超时, 分治法没想起什么好办法, 动规没头绪

3. dp[i][j] (i>=j) 表示入栈 i 次出栈 j 次 的种类数

4. dp[i][j] = dp[i-1][j] + dp[i][j-1]. 状态转移方程写出这样的依据应该在于讨论最后一位分别是 '(' 和 ')' 的情况. 就像 剑指offer 铺地板那题类似. 比如 dp[3][2], 当最后一位确定是 '(' 时, dp[3][2] = dp[2][2]; 当确定为 ')' 时, dp[3][2] = dp[3][1]. 如此看来, 这道题和自己以前做过的很多题目类似, 比如爬台阶, 比如方格寻路等等. 这些题目的共同特点是根据最后的状态位递推前面的所有可能性.

5. 会看 leetcode 对应那题, 发现那道是打印路径, 所以搜索法并没超时

代码 未能通过九度测试

#include <iostream>
#include <stdio.h>
#include <memory.h>
using namespace std;
int dp[][]; int find(int a, int b) {
if(a < b)
return ;
if(dp[a][b] != )
return dp[a][b];
if(a == || b == )
return ;
int res = find(a-,b) + find(a,b-);
if(res >= )
res = res%;
return (dp[a][b] = res);
}
int main() {
freopen("testcase.txt", "r", stdin);
int n;
memset(dp, , sizeof(dp));
for(int i = ; i < ; i ++)
dp[i][] = ;
dp[][] = ; while(scanf("%d", &n) != EOF) {
int res = find(n/,n/);
printf("%d\n", res);
}
return ;
}

九度 1547 出入栈(递推DP)的更多相关文章

  1. 九度 1552 座位问题(递推DP)

    题目描述: 计算机学院的男生和女生共n个人要坐成一排玩游戏,因为计算机的女生都非常害羞,男生又很主动,所以活动的组织者要求在任何时候,一个女生的左边或者右边至少有一个女生,即每个女生均不会只与男生相邻 ...

  2. 九度OJ 1081:递推数列 (递归,二分法)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:6194 解决:864 题目描述: 给定a0,a1,以及an=p*a(n-1) + q*a(n-2)中的p,q.这里n >= 2. 求第 ...

  3. Code Force 429B Working out【递推dp】

    Summer is coming! It's time for Iahub and Iahubina to work out, as they both want to look hot at the ...

  4. 递推DP URAL 1167 Bicolored Horses

    题目传送门 题意:k个马棚,n条马,黑马1, 白马0,每个马棚unhappy指数:黑马数*白马数,问最小的unhappy值是多少分析:dp[i][j] 表示第i个马棚放j只马的最小unhappy值,状 ...

  5. 递推DP URAL 1017 Staircases

    题目传送门 /* 题意:给n块砖头,问能组成多少个楼梯,楼梯至少两层,且每层至少一块砖头,层与层之间数目不能相等! 递推DP:dp[i][j] 表示总共i块砖头,最后一列的砖头数是j块的方案数 状态转 ...

  6. 递推DP URAL 1260 Nudnik Photographer

    题目传送门 /* 递推DP: dp[i] 表示放i的方案数,最后累加前n-2的数字的方案数 */ #include <cstdio> #include <algorithm> ...

  7. 递推DP URAL 1353 Milliard Vasya's Function

    题目传送门 /* 题意:1~1e9的数字里,各个位数数字相加和为s的个数 递推DP:dp[i][j] 表示i位数字,当前数字和为j的个数 状态转移方程:dp[i][j] += dp[i-1][j-k] ...

  8. 递推DP URAL 1119 Metro

    题目传送门 /* 题意:已知起点(1,1),终点(n,m):从一个点水平或垂直走到相邻的点距离+1,还有k个抄近道的对角线+sqrt (2.0): 递推DP:仿照JayYe,处理的很巧妙,学习:) 好 ...

  9. 递推DP 赛码 1005 Game

    题目传送门 /* 递推DP:官方题解 令Fi,j代表剩下i个人时,若BrotherK的位置是1,那么位置为j的人是否可能获胜 转移的时候可以枚举当前轮指定的数是什么,那么就可以计算出当前位置j的人在剩 ...

随机推荐

  1. 使用mybatisplus实现动态路由

    1.pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="h ...

  2. python 列表的内容赋值

    l1 = '20180201 b4b8e187-d59d-33fb-addc-ef189aca3712 com.ss.android.article.news' l2 = re.split('[ ]+ ...

  3. ajax的datatype选项的值

    jquery ajax方法 1."xml":返回 XML 文档,可用 jQuery 处理. 2."html"::返回纯文本 HTML 信息:包含的 script ...

  4. dpkg制作deb包

    deb包的文件结构: deb包里面的结构:DEBIAN目录 和 软件具体安装目录(模拟安装目录)(如etc, usr, opt, tmp等). 在DEBIAN目录中至少有control文件,还可能有p ...

  5. 泛型方法前为什么要加<T>

    package com.test05.myTest; class Fruit { public String toString() { return "Fruit"; } } cl ...

  6. udev规则以及编写

    主要内容: udev简介 如何配置和使用udev 如何编写udev规则 字符串替换和匹配 udev主要作用 编写udev规则实例 难点解析 1. udev简介 1.1 什么是udev? udev是Li ...

  7. [爬虫]Python爬虫进阶

    请跳转到以下页面查看: 爬虫进阶

  8. jquery-ajax-php(内容点赞并进行cookie限制实现)

    1.模板页html例如以下: 2.模板页的jquery里的ajax实现例如以下: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T ...

  9. xshell用ssh连接VMware中的ubuntu

    SSH分客户端openssh-client和openssh-server如果你只是想登陆别的机器的SSH只需要安装openssh-client(ubuntu有默认安装,如果没有则sudo apt-ge ...

  10. ubuntu下配置java环境

    配置JDK环境 下载 登录oracle的网站去下载JDK7 http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads ...