区间dp好题cf149d 括号匹配
见题解链接https://blog.csdn.net/sdjzping/article/details/19160013
- #include<bits/stdc++.h>
- using namespace std;
- #define maxn 750
- #define mod 1000000007
- int len,p[maxn];
- long long dp[maxn][maxn][][];
- char s[maxn];
- void match(){
- stack<int>stk;
- while(!stk.empty())stk.pop();
- for(int i=;i<len;i++){
- if(stk.empty()){
- stk.push(i);
- continue;
- }
- int t=stk.top();
- if(s[i]==')'&&s[t]=='('){
- p[t]=i,p[i]=t;
- stk.pop();
- }
- else stk.push(i);
- }
- }
- void dfs(int l,int r){
- if(l==r)return;
- if(l+==r){//只有一种情况
- dp[l][r][][]=dp[l][r][][]=dp[l][r][][]=dp[l][r][][]=;
- return;
- }
- if(p[l]==r){//配对了
- dfs(l+,r-);
- for(int i=;i<;i++)
- for(int j=;j<;j++){
- if(j!=)dp[l][r][][]=(dp[l][r][][]+dp[l+][r-][i][j])%mod;
- if(j!=)dp[l][r][][]=(dp[l][r][][]+dp[l+][r-][i][j])%mod;
- if(i!=)dp[l][r][][]=(dp[l][r][][]+dp[l+][r-][i][j])%mod;
- if(i!=)dp[l][r][][]=(dp[l][r][][]+dp[l+][r-][i][j])%mod;
- }
- return;
- }
- //剩下的情况就是不能配对的情况
- int tmp=p[l];
- dfs(l,tmp);dfs(tmp+,r);
- for(int i=;i<;i++)
- for(int j=;j<;j++)
- for(int k=;k<;k++)
- for(int m=;m<;m++)
- if(!((k== && m==) || (k== && m==)))
- dp[l][r][i][j]=(dp[l][r][i][j]+(dp[l][tmp][i][k]*dp[tmp+][r][m][j])%mod)%mod;
- }
- int main(){
- cin>>s;len=strlen(s);
- memset(dp,,sizeof dp);
- match();dfs(,len-);
- long long ans=;
- for(int i=;i<;i++)
- for(int j=;j<;j++)
- ans=(ans+dp[][len-][i][j])%mod;
- printf("%lld\n",ans);
- }
区间dp好题cf149d 括号匹配的更多相关文章
- 区间DP(入门)括号匹配
https://www.nitacm.com/problem_show.php?pid=8314 思路:类似于https://blog.csdn.net/MIKASA3/article/details ...
- POJ 2955 区间DP必看的括号匹配问题,经典例题
Brackets Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 14226 Accepted: 7476 Description ...
- poj 2955 Brackets (区间dp基础题)
We give the following inductive definition of a “regular brackets” sequence: the empty sequence is a ...
- 又一道区间DP的题 -- P3146 [USACO16OPEN]248
https://www.luogu.org/problemnew/show/P3146 一道区间dp的题,以区间长度为阶段; 但由于要处理相邻的问题,就变得有点麻烦; 最开始想了一个我知道有漏洞的方程 ...
- 状态压缩---区间dp第一题
标签: ACM 题目 Gappu has a very busy weekend ahead of him. Because, next weekend is Halloween, and he is ...
- poj 2955 区间dp入门题
第一道自己做出来的区间dp题,兴奋ing,虽然说这题并不难. 从后向前考虑: 状态转移方程:dp[i][j]=dp[i+1][j](i<=j<len); dp[i][j]=Max(dp[i ...
- 二叉树问题(区间DP好题)
二叉树问题 时间限制: 1 Sec 内存限制: 128 MB 题目描述 Petya Bulochkin很幸运:他得到了一份在"Macrohard"公司的工作.他想要展现他的才华, ...
- codeforces 1140D(区间dp/思维题)
D. Minimum Triangulation time limit per test 2 seconds memory limit per test 256 megabytes input sta ...
- 区间dp板子题:[noi1995]石子合并
非常经典的区间dp模板 对于每一个大于二的区间 我们显然都可以将它拆分成两个子序列 那么分别计算对于每个取最优值即可 #pragma GCC optimize("O2") #inc ...
随机推荐
- Python 爬虫的工具列表 附Github代码下载链接
Python爬虫视频教程零基础小白到scrapy爬虫高手-轻松入门 https://item.taobao.com/item.htm?spm=a1z38n.10677092.0.0.482434a6E ...
- 使用pycharm开发代码上传到GitLab和GitHub
使用pycharm开发代码上传到GitLab和GitHub 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我这里主要是针对局域网的自减的GitLab服务器,python开发工程师如 ...
- 让div固定在顶部不随滚动条滚动【转】
让div固定在顶部不随滚动条滚动 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "h ...
- Dubbo的负载均衡
背景 Dubbo是一个分布式服务框架,能避免单点故障和支持服务的横向扩容.一个服务通常会部署多个实例.如何从多个服务 Provider 组成的集群中挑选出一个进行调用,就涉及到一个负载均衡的策略. 几 ...
- datetimepicker bootstrap的时间插件显示位置问题及其他配置
位置问题: 在bootstrap中用 datetimepicker 时默认是在输入框下面弹出的, 但是遇到输入框在屏幕最下面时,日期选择框会有一部分在屏幕下面,显示不了,因此需要能够从上面弹出. 可以 ...
- ettercap插件介绍
利用sslstrip和ettercap突破ssl嗅探密码 ettercap之DNS欺骗--结合metasploit使用 ettercap支持在运行时加载模块.它们会自动地编译你的系统是否支持他们或者直 ...
- Tessaract 源码分析(转)
源码分析 Page Layout 分析步骤 二值化算法: OTSU调用栈:main[api/tesseractmain.cpp] -> TessBaseAPI::ProcessPages[api ...
- mongoDB - 日常操作一
mongodb 启动方式 # 不启动认证 ./mongod --bind_ip 172.16.2.17 --port --fork --logpath=/opt/mongodb/mongodb.log ...
- Wannafly挑战赛21 E 未来城市规划
传送门 题目中给的信息很难直接维护,但是可以考虑一条边对答案的贡献 在以\(x\)为根的子树里,如果一条边\(i\)的权值为\(w_i\),这条边深度更深的端点为\(to_i\),那么这条边对这个子树 ...
- [POI2007]ZAP-Queries (莫比乌斯反演+整除分块)
[POI2007]ZAP-Queries \(solution:\) 唉,数论实在有点烂了,昨天还会的,今天就不会了,周末刚证明的,今天全忘了,还不如早点写好题解. 这题首先我们可以列出来答案就是: ...