[删括号][判断可行性的dp]
链接:https://ac.nowcoder.com/acm/problem/21303
来源:牛客网
题目描述
你可以删除0个或者多个"()"
求能否删成另一个括号序列s2
第一行输入一个字符串s (2 ≤ |s| ≤ 100)第二行输入一个字符串t (2 ≤ |t| ≤ 100 ) 输出描述:
如果可以输出"Possible"否则输出"Impossible"
(()) () 输出
Possible
() () 输出
Possible
(()()()) ((())) 输出
Impossible
((())((())())()) (()(())()) 输出
Possible
((())((())())()) ((()()()()())) 输出
Impossible题意:给出一个两个合法的括号序列s1,s2,对s1可以不断删除(),注意(和)要相邻,比如(()())可以删除成(())或者()或者直接删除成空串,但是不嫩删除成()(),求是否可以变成s2题解:dp[i][j][k]表示s1位置1...i在删除掉若干个完整的()并且多删除k个(正好对应s2的1...j是否可行,由于()必须连续,所以当k>0的时候,不能不删除东西(即使s1[i]==s2[j]),也就是只有k==0的时候才能进行不删除的更新
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<queue> 5 #include<set> 6 #include<map> 7 #include<stack> 8 #include<vector> 9 #include<cmath> 10 #include<algorithm> 11 using namespace std; 12 typedef long long ll; 13 const int N=105; 14 int n,m,i,j,k;char a[N],b[N]; 15 int dp[N][N][N]; 16 int main() 17 { 18 scanf("%s%s",a+1,b+1); 19 n=strlen(a+1),m=strlen(b+1); 20 dp[0][0][0]=1; 21 for(int i=1;i<=n;i++){ 22 for(int j=0;j<=m;j++){ 23 for(int k=0;k<=n;k++){ 24 if(a[i]=='('){ 25 if(i&&k)dp[i][j][k]=max(dp[i-1][j][k-1],dp[i][j][k]); 26 if(i&&j&&a[i]==b[j]&&(!k))dp[i][j][k]=max(dp[i][j][k],dp[i-1][j-1][k]); 27 } 28 else{ 29 if(i)dp[i][j][k]=max(dp[i-1][j][k+1],dp[i][j][k]); 30 if(i&&j&&a[i]==b[j]&&(!k))dp[i][j][k]=max(dp[i][j][k],dp[i-1][j-1][k]); 31 } 32 } 33 34 } 35 } 36 if(dp[n][m][0])printf("Possible\n"); 37 else printf("Impossible\n"); 38 return 0; 39 }
View Code
转载于:https://www.cnblogs.com/MekakuCityActor/p/10747753.html
[删括号][判断可行性的dp]相关推荐
- POJ3189二分最大流(枚举下界,二分宽度,最大流判断可行性)
题意: 有n头猪,m个猪圈,每个猪圈都有一定的容量(就是最多能装多少只猪),然后每只猪对每个猪圈的喜好度不同(就是所有猪圈在每个猪心中都有一个排名),然后要求所有的猪都进猪圈,但是要求所有 ...
- 《程序员面试金典》合法括号判断
题目:对于一个字符串,请设计一个算法,判断其是否为一个合法的括号串. 给定一个字符串A和它的长度n,请返回一个bool值代表它是否为一个合法的括号串. 测试样例: "(()())" ...
- LeetCode 22. 括号生成(回溯/DP)
文章目录 1. 题目 2. 解题 2.1 暴力回溯 2.2 DP 1. 题目 给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合. 例如,给出 n = 3,生成结 ...
- poj3104(二分判断可行性)
/* translation:要使得一排衣服晾干,自然风干每分钟蒸发1单位的水分.用烘干机的话每分钟蒸发k单位的水分.求把所有衣物晾干的话至少需要多长时间? solution:二分查找最小可行解首先二 ...
- 【noi 2.6_3531】判断整除(DP)
题意:给一个正整数数列,可将其相加或相减,问是否有一个结果能被K整除. 解法:似上一题"糖果"的状态定义,f[i][j]表示是否有一个选了前 i 个数的结果模K余j. P.S. 可 ...
- 区域判断hdu 3681 Prison Break bfs+二分+dp
时间紧张,先记一笔,后续优化与完善. 这个是2010杭州区域赛的目题. bfs出最短路,二分谜底,dp判断可行性. #include <iostream> #include <cst ...
- PTA-至多删三个字符-(dp+容斥)
至多删三个字符 题意: 就是给你一个字符串,然后你最多可以删掉3个字符,问你最终可以形成多少种不用的字符串. 思考: 刚开始看到其实没啥想法,要么就是暴力.但是仔细思考一下,这种题貌似没有什么偏僻的做 ...
- 【牛客 - 188D 】愤怒(01滚动数组优化dp,括号匹配方案个数,tricks)
题干: 小w很生气 小w有一个长为n的括号序列 愤怒小w想把这个括号序列分为两个括号序列 小w想让分为的这两个括号序列同时合法 小w想知道一共有多少种划分方案 (划分的意思是划分为两个子序列) 注意两 ...
- 动态规划DP题单 AcWing算法基础课 (详解)
目录 背包问题 背包问题初始化总结 AcWing 2. 01背包问题 AcWing 3. 完全背包问题 AcWing 4. 多重背包问题 AcWing 5. 多重背包问题 II AcWing 9. 分 ...
- 洛谷--橙色百道DP总结
最近刷完了洛谷橙色DP大约一百道,算是发现了一些套路,就部分题目做一些总结. 大概分为三类 第一类,九大背包及其衍生 第二类,经典DP模型,如LCS,LIS等 第三类,实际问题背景的普通,环形,树上D ...
最新文章
- 如何为机器视觉系统选择合适的图像采集卡
- 全国大学生智能汽车竞赛 --智慧物流创意组
- Fedora相关(一)
- php调用dll函数,[转载]matlab调用DLL中的函数
- sencha touch下,害人不浅的“*”号命名空间引入
- ubuntu16.04下面流畅运行pycharm设置
- android studio 显示图形_显示服务器实现(一)
- 前端接入HTTP协议浅析
- 判断radio单选按钮是否选中
- 软件测试--cookie学习
- linux简单命令3---帮助命令
- Java selenium和python_c#和Java和python设置selenium超时时间
- 用户行为序列推荐模型
- 最强大脑《智行营救》
- SONiC(3):手动运行docker ptf
- Vscode的beautify插件使用
- 算法开启循环队列武魂
- c语言程序设计评分标准,c语言程序设计期末(A)标准答案及评分标准.doc
- 错误: -source 1.6 中不支持 diamond 运算符 (请使用 -source 7 或更高版本以启用 diamond 运算符)
- 【CSS3】边角 border-radius