九度 1547 出入栈(递推DP)
给定一个初始为空的栈,和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)的更多相关文章
- 九度 1552 座位问题(递推DP)
题目描述: 计算机学院的男生和女生共n个人要坐成一排玩游戏,因为计算机的女生都非常害羞,男生又很主动,所以活动的组织者要求在任何时候,一个女生的左边或者右边至少有一个女生,即每个女生均不会只与男生相邻 ...
- 九度OJ 1081:递推数列 (递归,二分法)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:6194 解决:864 题目描述: 给定a0,a1,以及an=p*a(n-1) + q*a(n-2)中的p,q.这里n >= 2. 求第 ...
- 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 ...
- 递推DP URAL 1167 Bicolored Horses
题目传送门 题意:k个马棚,n条马,黑马1, 白马0,每个马棚unhappy指数:黑马数*白马数,问最小的unhappy值是多少分析:dp[i][j] 表示第i个马棚放j只马的最小unhappy值,状 ...
- 递推DP URAL 1017 Staircases
题目传送门 /* 题意:给n块砖头,问能组成多少个楼梯,楼梯至少两层,且每层至少一块砖头,层与层之间数目不能相等! 递推DP:dp[i][j] 表示总共i块砖头,最后一列的砖头数是j块的方案数 状态转 ...
- 递推DP URAL 1260 Nudnik Photographer
题目传送门 /* 递推DP: dp[i] 表示放i的方案数,最后累加前n-2的数字的方案数 */ #include <cstdio> #include <algorithm> ...
- 递推DP URAL 1353 Milliard Vasya's Function
题目传送门 /* 题意:1~1e9的数字里,各个位数数字相加和为s的个数 递推DP:dp[i][j] 表示i位数字,当前数字和为j的个数 状态转移方程:dp[i][j] += dp[i-1][j-k] ...
- 递推DP URAL 1119 Metro
题目传送门 /* 题意:已知起点(1,1),终点(n,m):从一个点水平或垂直走到相邻的点距离+1,还有k个抄近道的对角线+sqrt (2.0): 递推DP:仿照JayYe,处理的很巧妙,学习:) 好 ...
- 递推DP 赛码 1005 Game
题目传送门 /* 递推DP:官方题解 令Fi,j代表剩下i个人时,若BrotherK的位置是1,那么位置为j的人是否可能获胜 转移的时候可以枚举当前轮指定的数是什么,那么就可以计算出当前位置j的人在剩 ...
随机推荐
- 使用mybatisplus实现动态路由
1.pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="h ...
- python 列表的内容赋值
l1 = '20180201 b4b8e187-d59d-33fb-addc-ef189aca3712 com.ss.android.article.news' l2 = re.split('[ ]+ ...
- ajax的datatype选项的值
jquery ajax方法 1."xml":返回 XML 文档,可用 jQuery 处理. 2."html"::返回纯文本 HTML 信息:包含的 script ...
- dpkg制作deb包
deb包的文件结构: deb包里面的结构:DEBIAN目录 和 软件具体安装目录(模拟安装目录)(如etc, usr, opt, tmp等). 在DEBIAN目录中至少有control文件,还可能有p ...
- 泛型方法前为什么要加<T>
package com.test05.myTest; class Fruit { public String toString() { return "Fruit"; } } cl ...
- udev规则以及编写
主要内容: udev简介 如何配置和使用udev 如何编写udev规则 字符串替换和匹配 udev主要作用 编写udev规则实例 难点解析 1. udev简介 1.1 什么是udev? udev是Li ...
- [爬虫]Python爬虫进阶
请跳转到以下页面查看: 爬虫进阶
- jquery-ajax-php(内容点赞并进行cookie限制实现)
1.模板页html例如以下: 2.模板页的jquery里的ajax实现例如以下: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T ...
- xshell用ssh连接VMware中的ubuntu
SSH分客户端openssh-client和openssh-server如果你只是想登陆别的机器的SSH只需要安装openssh-client(ubuntu有默认安装,如果没有则sudo apt-ge ...
- ubuntu下配置java环境
配置JDK环境 下载 登录oracle的网站去下载JDK7 http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads ...