UVa1626 Brackets sequence
来源:互联网 发布:数据交换的三种方式 编辑:程序博客网 时间:2024/06/10 06:34
括号匹配题。。总觉得以前看过,但是没做出来。也是区间的状态转移dp,dp(l,r)表示l~r区间内最少加括号数,可以转移到dp(l+1,r-1)(两端配对的情况下)和dp(l,k)+dp(k,r)。然后需要记录路径,递归路径输出一种结果。这题输入输出有坑,害我WA了好多发。。
#include <iostream> #include <stdio.h> #include <cmath> #include <algorithm> #include <iomanip> #include <cstdlib> #include <string> #include <memory.h> #include <vector> #include <queue> #include <stack> #include <map> #include <set> #include <ctype.h> #define INF 1000000 #define ll long long#define min3(a,b,c) min(a,min(b,c)) using namespace std; //string str;char str[110];int dp[110][110];int path[110][110];void print(int l,int r){if(l>r)return;if(l==r){switch (str[l]){case '(':case ')':cout<<"()";break;case '[':case ']':cout<<"[]";break;}return;}if(path[l][r]==-1){cout<<str[l];print(l+1,r-1);cout<<str[r];}else{print(l,path[l][r]);print(path[l][r]+1,r);}}int main(){int t;cin>>t;getchar();while(t--){//scanf("%s",str);//getline(cin,str);gets(str);gets(str);int len=strlen(str);for(int i=0;i<len;i++){dp[i][i]=1;dp[i+1][i]=0;}for(int d=1;d<len;d++){for(int i=0;i+d<len;i++){dp[i][i+d]=INF;if( (str[i]=='('&&str[i+d]==')')||(str[i]=='['&&str[i+d]==']') ){dp[i][i+d]=min(dp[i][i+d],dp[i+1][i+d-1]);path[i][i+d]=-1;}for(int k=i;k<i+d;k++){if(dp[i][k]+dp[k+1][i+d]<dp[i][i+d]){dp[i][i+d]=dp[i][k]+dp[k+1][i+d];path[i][i+d]=k;}}}}print(0,len-1);cout<<endl;if(t)cout<<endl;}return 0;}
0 0
- uva1626 Brackets sequence
- UVa1626 Brackets sequence
- UVA1626 - Brackets sequence
- UVA1626 Brackets sequence
- [UVA1626]Brackets sequence(dp)
- UVa1626 Brackets sequence
- UVA1626 / ZOJ1463 Brackets sequence 区间DP
- UVA1626[Brackets sequence] 区间动态规划
- UVA1626 - Brackets sequence(区间DP--括号匹配+递归打印)
- uva1626 poj 1141 Brackets Sequence 区间dp 打印路径
- 例题9-10 UVa1626&&POJ1141 Brackets Sequence(DP)
- #UVA1626#Brackets sequence(括号序列---石子归并类Dp)
- Brackets Sequence
- Brackets Sequence
- Brackets sequence
- Brackets Sequence
- Brackets Sequence
- Brackets Sequence
- 调用ajax时session过期的处理方法
- hdu2089 不要62 数位DP模板题
- oracle触发器实例
- Java方法递归调用
- web页面json数据的解析显示
- UVa1626 Brackets sequence
- 如何使用NSOperations和NSOperationQueues 第一部分
- WIN+方向键不能用
- 学习日记之桥接模式和多重继承
- i++为什么不能作为左值?
- 精度要注意的细节
- 两岸开源文化面面观
- acdream 1044
- 如何使用NSOperations和NSOperationQueues 第二部分