链接:https://ac.nowcoder.com/acm/problem/21303
来源:牛客网
题目描述

给你一个合法的括号序列s1,每次你可以删除一个"()"
你可以删除0个或者多个"()"
求能否删成另一个括号序列s2
输入描述:
第一行输入一个字符串s (2 ≤ |s| ≤ 100)
第二行输入一个字符串t (2 ≤ |t| ≤ 100 ) 输出描述:
如果可以输出"Possible"
否则输出"Impossible"
示例1
输入
复制

(())
() 输出
复制

Possible
示例2
输入
复制

()
() 输出
复制

Possible
示例3
输入
复制

(()()())
((())) 输出
复制

Impossible
示例4
输入
复制

((())((())())())
(()(())()) 输出
复制

Possible
示例5
输入
复制

((())((())())())
((()()()()())) 输出
复制

Impossible
题意:给出一个两个合法的括号序列s1,s2,对s1可以不断删除(),注意(和)要相邻,比如(()())可以删除成(())或者()或者直接删除成空串,但是不嫩删除成()(),求是否可以变成s2
题解:dp[i][j][k]表示s1位置1...i在删除掉若干个完整的()并且多删除k个(正好对应s2的1...j是否可行,由于()必须连续,所以当k>0的时候,不能不删除东西(即使s1[i]==s2[j]),也就是只有k==0的时候才能进行不删除的更新
 #include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<set>
#include<map>
#include<stack>
#include<vector>
#include<cmath>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N=;
int n,m,i,j,k;char a[N],b[N];
int dp[N][N][N];
int main()
{
scanf("%s%s",a+,b+);
n=strlen(a+),m=strlen(b+);
dp[][][]=;
for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
for(int k=;k<=n;k++){
if(a[i]=='('){
if(i&&k)dp[i][j][k]=max(dp[i-][j][k-],dp[i][j][k]);
if(i&&j&&a[i]==b[j]&&(!k))dp[i][j][k]=max(dp[i][j][k],dp[i-][j-][k]);
}
else{
if(i)dp[i][j][k]=max(dp[i-][j][k+],dp[i][j][k]);
if(i&&j&&a[i]==b[j]&&(!k))dp[i][j][k]=max(dp[i][j][k],dp[i-][j-][k]);
}
} }
}
if(dp[n][m][])printf("Possible\n");
else printf("Impossible\n");
return ;
}

[删括号][判断可行性的dp]的更多相关文章

  1. 删括号(dp)

    题目链接:https://ac.nowcoder.com/acm/problem/21303 思路:删括号的时候一定要时刻保证左括号数量比右括号多,我们可以定义dp[i][j][k]表示考虑AA前i个 ...

  2. hdu 3622(二分+2-sat判断可行性)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3622 思路:二分是容易想到的,由于题目中有明显的矛盾关系,因此可以用2-sat来验证其可行性.关键是如 ...

  3. 括号序列(区间dp)

    括号序列(区间dp) 输入一个长度不超过100的,由"(",")","[",")"组成的序列,请添加尽量少的括号,得到一 ...

  4. POJ3189二分最大流(枚举下界,二分宽度,最大流判断可行性)

    题意:       有n头猪,m个猪圈,每个猪圈都有一定的容量(就是最多能装多少只猪),然后每只猪对每个猪圈的喜好度不同(就是所有猪圈在每个猪心中都有一个排名),然后要求所有的猪都进猪圈,但是要求所有 ...

  5. POJ 2955 Brackets --最大括号匹配,区间DP经典题

    题意:给一段左右小.中括号串,求出这一串中最多有多少匹配的括号. 解法:此问题具有最优子结构,dp[i][j]表示i~j中最多匹配的括号,显然如果i,j是匹配的,那么dp[i][j] = dp[i+1 ...

  6. POJ 2955 括号匹配,区间DP

    题意:给你一些括号,问匹配规则成立的括号的个数. 思路:这题lrj的黑书上有,不过他求的是添加最少的括号数,是的这些括号的匹配全部成立. 我想了下,其实这两个问题是一样的,我们可以先求出括号要匹配的最 ...

  7. PTA L3-020 至多删三个字符 (序列dp/序列自动机)

    给定一个全部由小写英文字母组成的字符串,允许你至多删掉其中 3 个字符,结果可能有多少种不同的字符串? 输入格式: 输入在一行中给出全部由小写英文字母组成的.长度在区间 [4, 1] 内的字符串. 输 ...

  8. 九度OJ 1153:括号匹配问题 (DP)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:5193 解决:2248 题目描述: 在某个字符串(长度不超过100)中有左括号.右括号和大小写字母:规定(与常见的算数式子一样)任何一个左括 ...

  9. [LeetCode] 22. 括号生成(回溯/DP)

    题目 给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合. 例如,给出 n = 3,生成结果为: [ "((()))", "(()( ...

随机推荐

  1. unity5.6 导出gradle工程,Android Studio 导入问题以及解决

    导入后gradle building 一直到跑,卡住了,一般是gradle没有下载,又下不下来的原因. 去  http://services.gradle.org/distributions/  下载 ...

  2. Mysql数据字典导出

    1.phpmyadmin中自带的数据字典导出 2.利用下面的脚本: <?php /** * 生成mysql数据字典 */ header("Content-type: text/html ...

  3. python基础之作业1---用户登录

    作业:编写登陆接口 输入用户名密码 认证成功后显示欢迎信息 输错三次后锁定 import sys, os, getpass os.system('clear')i = 0while i < 3: ...

  4. Python随笔--对象

    组合的用法:

  5. Thread类中start()方法喝run()方法有什么不同?

    答:当调用start()方法时会启动一个新创建的线程,然后在start()内部调用run()方法.这和直接调用run()方法不同.直接调用run()方法只是在原来的线程中调用,没有创建新的线程.只有调 ...

  6. linux安装mysql(shell一键安装)

    1. 相关文件(install_mysql.sh.my.cnf.mysqld相关内容在文中最后面) 2. 将上面的文件上传到linux服务器某一目录下 3.给install_mysql.sh赋执行权限 ...

  7. hadoop streaming字段排序介绍

    我们在使用hadoop streaming的时候默认streaming的map和reduce的separator不指定的话,map和reduce会根据它们默认的分隔符来进行排序 map.reduce: ...

  8. DevExpress ASP.NET Core Controls 2019发展蓝图(No.4)

    本文主要为大家介绍DevExpress ASP.NET Core Controls 2019年的官方发展蓝图,更多精彩内容欢迎持续收藏关注哦~ [DevExpress ASP.NET Controls ...

  9. Devexpress的DateEdit控件中DateTime与EditValue异同

    相同: 两者值相同,改变一个值都会引起另一个值做出相应改变. 不同: 1:在界面上对控件的编辑框进行操作时,EditValueChanged事件先响应,DateTimeChanged事件后响应. 2: ...

  10. Linux相关问题总结

    1.linux没有ifconfig命令 可以使用以下命令查询ip地址: ip addr show ifconfig命令在net-tools工具里,安装命令: yum install net-tools