【动态规划】POJ 1161 & ZOJ1463 & XMU 1033 Brackets sequence
2016-08-02 13:22
417 查看
[b]题目链接:[/b]
[b][b][b]http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1033[/b][/b][/b]
[b][b][b] http://poj.org/problem?id=1141[/b][/b][/b]
[b][b][b] ZOJ目前挂了。[/b][/b][/b]
[b]题目大意:[/b]
给一个括号序列,要求输出,最少增加括号数情况下,任意一个合法括号序列即可。
匹配是指()和[]完全合法,可以嵌套。
[b]题目思路:[/b]
【动态规划】
区间DP,枚举左右区间端点,两种匹配方法:中间拆开匹配或者直接头尾匹配。
转移得到最优值,同时记录得到最优值的方法,最后逆推得到不用增加的括号位置,再要增加的括号加上即可
(括号在前在后添加对于答案长短不会有影响)
千万不要点
[b][b][b]http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1033[/b][/b][/b]
[b][b][b] http://poj.org/problem?id=1141[/b][/b][/b]
[b][b][b] ZOJ目前挂了。[/b][/b][/b]
[b]题目大意:[/b]
给一个括号序列,要求输出,最少增加括号数情况下,任意一个合法括号序列即可。
匹配是指()和[]完全合法,可以嵌套。
[b]题目思路:[/b]
【动态规划】
区间DP,枚举左右区间端点,两种匹配方法:中间拆开匹配或者直接头尾匹配。
转移得到最优值,同时记录得到最优值的方法,最后逆推得到不用增加的括号位置,再要增加的括号加上即可
(括号在前在后添加对于答案长短不会有影响)
// //by coolxxx // #include<iostream> #include<algorithm> #include<string> #include<iomanip> #include<memory.h> #include<time.h> #include<stdio.h> #include<stdlib.h> #include<string.h> //#include<stdbool.h> #include<math.h> #define min(a,b) ((a)<(b)?(a):(b)) #define max(a,b) ((a)>(b)?(a):(b)) #define abs(a) ((a)>0?(a):(-(a))) #define lowbit(a) (a&(-a)) #define sqr(a) ((a)*(a)) #define swap(a,b) ((a)^=(b),(b)^=(a),(a)^=(b)) #define eps (1e-8) #define J 10000000 #define MAX 0x7f7f7f7f #define PI 3.1415926535897 #define N 104 using namespace std; typedef long long LL; int cas,cass; int n,m,lll,ans; int f ,mark ; char s ; bool c ; bool compare(int i,int j) { return (s[i]=='(' && s[j]==')')||(s[i]=='[' && s[j]==']'); } void print(int i,int j) { if(i>=j)return; if(mark[i][j]==-2) { c[i]=c[j]=1; print(i+1,j-1); return; } print(i,mark[i][j]); print(mark[i][j]+1,j); } int main() { #ifndef ONLINE_JUDGE // freopen("1.txt","r",stdin); // freopen("2.txt","w",stdout); #endif int i,j,k,l; // for(scanf("%d",&cas);cas;cas--) // for(scanf("%d",&cas),cass=1;cass<=cas;cass++) while(~scanf("%s",s)) // while(~scanf("%d",&n)) { n=strlen(s); memset(f,0x7f,sizeof(f)); memset(mark,-1,sizeof(mark)); memset(c,0,sizeof(c)); for(i=0;i<n;i++) { f[i][i]=1;f[i+1][i]=0; } for(l=1;l<n;l++) { for(i=0,j=i+l;i+l<n;i++,j++) { for(k=i;k<j;k++) { if(f[i][j]>f[i][k]+f[k+1][j]) { f[i][j]=f[i][k]+f[k+1][j]; mark[i][j]=k; } } if(compare(i,j) && f[i][j]>f[i+1][j-1]) { f[i][j]=f[i+1][j-1]; mark[i][j]=-2; } } } print(0,n-1); for(i=0;i<n;i++) { if(!c[i]) { if(s[i]=='(' || s[i]==')')printf("()"); else printf("[]"); } else printf("%c",s[i]); } puts(""); } return 0; } /* // // */
千万不要点
相关文章推荐
- 【动态规划】POJ 1161 & ZOJ1463 & XMU 1033 Brackets sequence
- ZOJ 1161 && POJ 1042
- [dp问题] Poj 1014 & Zoj 1149 (Dividing) 解题报告(转)
- zoj 1333 && poj 1545 Galactic Import(floyd)
- poj 2029 && zoj 1716 Get Many Persimmon Trees
- poj 1384 & zoj 2014 Piggy-Bank(完全背包)
- poj 2063& zoj 2224 Investment (多次完全背包)
- POJ 1163 The Triangle & POJ 3176 Cow Bowling(DP动态规划)
- POJ-1625 & ZOJ-1540 & Ural-1158 AC自动机+DP+大数..
- ZOJ 1857 && POJ 2607 Fire Station【SPFA】
- ZOJ 1133 & POJ 1142 Smith Numbers
- zoj 1061 &&poj 0128 Web Navigation(STL 栈~~水)
- zoj 1951 || poj 2262 Goldbach's Conjecture(水水~)
- ZOJ 1066 Square Ice(POJ 1099)(找规律&模拟)
- POJ 3660 && NYIST 211 Cow Contest && ZOJ 1060 Sorting It All Out【Floyd算法扩展应用】
- poj 3067 && zoj 3129
- zoj 1092 && poj 2240 Arbitrage (floyd算法)
- Noi 01炮兵阵地 & poj1185 &NYOJ81 炮兵阵地 状态压缩和动态规划
- poj 3268 Silver Cow Party & zoj 2008 Invitation Cards
- poj 1637 & zoj 1992 混合图的欧拉回路