FZU2030(括号匹配)
2016-04-07 13:22
567 查看
题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=110977#problem/E
题目大意:略
题目思路:数据范围很小,可以搜索,但是如果数据范围较大则只能DP
用二维数组表示状态dp[i][j]表示扫描到第i个字符时有j个'('还未完成匹配,而答案就是dp[len-1][0] len表示字符串长度,
dp[len-1][0]表示扫描完最后一个字符后没有未匹配的'('.
代码:
题目大意:略
题目思路:数据范围很小,可以搜索,但是如果数据范围较大则只能DP
用二维数组表示状态dp[i][j]表示扫描到第i个字符时有j个'('还未完成匹配,而答案就是dp[len-1][0] len表示字符串长度,
dp[len-1][0]表示扫描完最后一个字符后没有未匹配的'('.
代码:
#include <iostream> #include <cstdio> #include <cstdlib> #include <cmath> #include <algorithm> #include <cstring> #include <stack> #include <cctype> #include <queue> #include <string> #include <vector> #include <set> #include <map> #include <climits> #define lson root<<1,l,mid #define rson root<<1|1,mid+1,r #define fi first #define se second #define ping(x,y) ((x-y)*(x-y)) #define mst(x,y) memset(x,y,sizeof(x)) using namespace std; #define gamma 0.5772156649015328606065120 //欧拉常数 #define MOD 100000007 #define inf 0x3f3f3f3f #define N 100005 #define maxn 10001000 typedef long long LL; typedef pair<int,int> PII; char str[20]; int dp[20][20]; int main() { int i,m,j; int x,y,v; while(scanf("%s",str)!=EOF) { mst(dp,0); dp[0][1]=1; int len=strlen(str); for(i=1; i<len; ++i) for(j=0; j<len; ++j) { if(str[i]=='(') ///扫到一个'('则应该和j-1个'('情况相同 { if(j) dp[i][j]=dp[i-1][j-1]; } else if(str[i]==')') ///扫到一个')'则该和j+1个'('相同,因为当前的')'会消去一个'(' { dp[i][j]=dp[i-1][j+1]; } else ///如果是?则可以加'(',也可以加')'所以两种情况都要加 { dp[i][j]=dp[i-1][j+1]; if(j) dp[i][j]+=dp[i-1][j-1]; } } printf("%d\n",dp[len-1][0]); } return 0; }
相关文章推荐
- Fox And Names
- 赛马问题
- MySQL(7)-多源复制
- CentOS7下二进制文件安装MySQL5.6
- UITextField的使用
- php计算字符串长度:utf8编码,包含中文
- 2016年三月份资源实力排行榜
- POJ2253 Frogger
- Swift、OC混编用到的Bridging-Header.h
- 从.NET转JAVA开发
- Android Studio 简介
- python3学习笔记1--TypeError: 'dict' object is not callable的解决
- unity3d动画帧事件回调脚本必须直接挂在模型上
- Hibernate 下载、安装和使用
- WebRequest请求范例
- win32下安装mingw32和cmake来编译opencv2.4.9
- 機器學習基石(Machine Learning Foundations) 机器学习基石 作业三 Q13-15 C++实现
- CDMA2000 3G Chat 拨号
- 实现简单的队和栈结构,附代码,图
- 机器学习:防止过拟合的方法