Brackets Sequence POJ - 1141 (区间dp)

news/2024/5/20 4:35:23

Brackets Sequence

 POJ - 1141 

题意:给一个括号序列,问最少添加多少个括号似的原序列匹配,并输出新序列。

用dp[i][j]表示i到j最少添加几个括号,flag[i][j]表示i和j之间需要添加括号的位置。

 1 #include<cstdio>
 2 #include<algorithm>
 3 #include<string>
 4 #include<iostream>
 5 #include <cstdlib>
 6 #include<cstring>
 7 using namespace std;
 8 const int maxn=110;
 9 const int inf=0x3f3f3f3f;
10 int dp[maxn][maxn],flag[maxn][maxn];
11 char s[maxn];
12 
13 void print(int l,int r){
14     if(l>r) return ;
15     if(l==r){
16         if(s[l]=='('||s[l]==')') printf("()");
17         else printf("[]");
18         return ;
19     }
20     if(flag[l][r]==-1){
21         putchar(s[l]);
22         print(l+1,r-1);
23         putchar(s[r]);
24     }else {
25         print(l,flag[l][r]);
26         print(flag[l][r]+1,r);
27     }
28 }
29 int main(){
30     while(gets(s)){
31         memset(dp,0,sizeof(dp));
32         int len=strlen(s);
33         for(int i=0;i<len;i++) dp[i][i]=1;
34         for(int i=len-2;i>=0;i--)
35             for(int j=i+1;j<len;j++){
36             dp[i][j]=inf;
37             if(s[i]=='('&&s[j]==')'||s[i]=='['&&s[j]==']')
38             if(dp[i][j]>dp[i+1][j-1]){
39                 dp[i][j]=dp[i+1][j-1];
40                 flag[i][j]=-1;
41             }
42             for(int k=i;k<j;k++)
43                 if(dp[i][j]>dp[i][k]+dp[k+1][j]){
44                     dp[i][j]=dp[i][k]+dp[k+1][j];
45                     flag[i][j]=k;
46                 }
47         }
48         print(0,len-1);
49         puts("");
50     }
51 }
v1
 1 #include<cstdio>
 2 #include<algorithm>
 3 #include<string>
 4 #include<iostream>
 5 #include <cstdlib>
 6 #include<cstring>
 7 using namespace std;
 8 const int maxn=110;
 9 const int inf=0x3f3f3f3f;
10 int dp[maxn][maxn],flag[maxn][maxn];
11 char s[maxn];
12 
13 void print(int l,int r){
14     if(l>r) return ;
15     if(l==r){
16         if(s[l]=='('||s[l]==')') printf("()");
17         else printf("[]");
18         return ;
19     }
20     if(flag[l][r]==-1){
21         putchar(s[l]);
22         print(l+1,r-1);
23         putchar(s[r]);
24     }else {
25         print(l,flag[l][r]);
26         print(flag[l][r]+1,r);
27     }
28 }
29 int main(){
30     while(gets(s)){
31         memset(dp,0,sizeof(dp));
32         int len=strlen(s);
33         for(int i=0;i<len;i++) dp[i][i]=1;
34         for(int k=1;k<len;k++){
35             for(int i=0;i+k<len;i++){
36                 int j=i+k;
37                 dp[i][j]=inf;
38                 if(s[i]=='('&&s[j]==')'||s[i]=='['&&s[j]==']')
39                 if(dp[i][j]>dp[i+1][j-1]){
40                     dp[i][j]=dp[i+1][j-1];
41                     flag[i][j]=-1;
42                 }
43                 for(int m=i;m<j;m++){
44                     if(dp[i][j]>dp[i][m]+dp[m+1][j]){
45                         dp[i][j]=dp[i][m]+dp[m+1][j];
46                         flag[i][j]=m;
47                     }
48                 }
49             }
50         }
51         print(0,len-1);
52         puts("");
53     }
54 }
v2

 

转载于:https://www.cnblogs.com/yijiull/p/7435016.html


http://www.niftyadmin.cn/n/4487350.html

相关文章

Wincc flexable的数据记录的组态

Wincc flexable的数据记录的组态 1.数据记录就是将PLC采集的数据记录下来如下&#xff0c;注意只有TP270和OP270以上的HMI设备才有数据记录 2.练习展示 3.开始创建数据记录 4.组态数据记录 5.组态变量的记录属性。将数据记录和变量绑定起来 1&#xff09;新建连接和变量 2)组态…

Android getWidth和getMeasuredWidth的正解

http://hi.baidu.com/ljlkings/blog/item/fa2a59803f839a82f603a6b2.html?timeStamp1305190390481 一。也許很多童鞋對getWidth()和getMeasuredWidth()的用法有很多的不解&#xff0c;這兩者之間有什麼樣的不同呢&#xff0c;網上也有各種不同的版本&#xff0c;但大多數都大同…

基础备忘:多态的实现(重载、虚函数、抽象类)

1.函数重载 由静态联编支持的多态性称为编译时的多态性或静态多态性&#xff0c;也就是说&#xff0c;确定同名操作的具体操作对象的过程是在编译过程中完成的。在C中&#xff0c;可以用函数重载和运算符重载来实现编译时的多态性。 2.虚函数 由动态联编支持的多态性称为运行…

一些不错的Android专栏地址

几个不错的Android专栏地址: 第三极: http://disanji.net/category/android-doc/ moandroid: http://www.moandroid.com/?page_id1176 maxlen的专栏: http://mobile.csdn.net/a/20110209/291511.html 魏祝林的专栏: http://blog.csdn.net/Android_Tutor/ duguguiyu的深入A…

如何在app store营销之实战技巧(7)

可否先学开发&#xff0c;然后再花钱注册苹果开发账号&#xff1f;~~~各位劳驾~问一个关于Unity3D导出工程的报错信息~~~button问题&#xff1f;急&#xff0c;求高手指教&#xff01;真机调试出现问题了如何调用系统自带的邮箱Xcode4无法安装&#xff0c;提示需要Mac OS X 10.…

Python-- lxml安装

无论是使用爬虫框架scrapy&#xff0c;还是简单的requests请求后解析。都不可避免的需要使用html解析库。当然正则是可以代替一部分搜索。由于正则语法的晦涩&#xff0c;及其其他场景下&#xff0c;html解析是必不可少的。网上推荐 lxml的比较多&#xff0c;优点&#xff1a;稳…

hdu 3118 Arbiter

http://acm.hdu.edu.cn/showproblem.php?pid3118 题意&#xff1a;删除最少的边使图没有奇环二分图的定义&#xff1a;如果顶点能分为两个互不相交的子集&#xff0c;则图为二分图二分图的判定&#xff1a;如果二分图能黑白染色成功&#xff0c;则图为二分图而黑白染色&#x…

Python-- lxml用法

目录 lxml库&#xff08;lxml安装可查看上一篇文章&#xff09; Element类 1、节点操作 2、属性操作 3、文本操作 4、文件解析与输出 5、ElementPath 6、案例&#xff08;尤其最后的一篇代码&#xff09; lxml库&#xff08;lxml安装可查看上一篇文章&#xff09; py…