POJ1141 Brackets Sequence
来源:互联网 发布:剑灵捏脸数据灵族男 编辑:程序博客网 时间:2024/09/21 09:05
题目大意:定义一些规则序列:如果S是规则序列,那么[S]或者(S)也是规则序列,如果A和B都是规则序列,那么AB是规则序列。给出含有圆括号"()"和方括号"[]"的字符串
求添加最少括号的规则序列,并打印出来。
思路:含有重复子问题,递归动机的DP。
当字符串中ww[i]=='(' && ww[j]==')' 或者 ww[i]=='['&&ww[j]==']',那么显然只需要看dp[i+1][j-1]的结果即可。
dp[i][j] = min(dp[i][k] + dp[k + 1][j]), i<=k < j;
然后通过二分思想分呀分,找到中间使得dp【i】【j】最小的k,并记载下来,便于递归打印规则序列。
AC Program:
#include<iostream>#include<stdio.h>#include<string.h>using namespace std;#define inf 1000000000char ww[108];int dp[108][108];int pos[108][108];//dp[i][j]indicate:the characters from i to j//the smallest length added. void print(int a ,int b){ //cout<<a<<" "<<b<<endl; if(a==b){ if(ww[a]=='(' ||ww[a]==')'){//lost the last half printf("()"); } else{ printf("[]"); } } if(a>=b){return;}//can't set a flag cause all leaves should be printed. if(pos[a][b]==-1){ if(ww[a]=='('){ printf("("); print(a+1,b-1); printf(")"); } else{ printf("["); print(a+1,b-1); printf("]"); } } else{ print(a,pos[a][b]); print(pos[a][b]+1,b); }}int main(){scanf("%s",ww+1);int n=strlen(ww+1);//from 1 to startfor(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ dp[i][j]=inf; } dp[i][i-1]=0; dp[i][i]=1;} memset(pos,-1,sizeof(pos)); for(int p=1;p<=n-1;p++){ for(int i=1;i<=n-p;i++){ int j=i+p; if((ww[i]=='('&&ww[j]==')')||(ww[i]=='[' && ww[j]==']')){ //dp[i][j]=min(dp[i][j],dp[i+1][j-1]); if(dp[i][j]>dp[i+1][j-1]){ dp[i][j]=dp[i+1][j-1]; pos[i][j]=-1; } } for(int k=i;k<=j-1;k++){ //dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]); if(dp[i][j]>dp[i][k]+dp[k+1][j]){ dp[i][j]=dp[i][k]+dp[k+1][j]; pos[i][j]=k; } } } }print(1,n);printf("\n");//cout<<pos[1][n]<<endl;//printf("%d\n",dp[1][n]);//system("pause");return 0;}
- POJ1141 Brackets Sequence
- poj1141 Brackets Sequence
- POJ1141--Brackets Sequence--DP
- POJ1141 Brackets Sequence
- POJ1141 Brackets Sequence
- POJ1141 Brackets Sequence
- poj1141 Brackets Sequence
- poj1141 Brackets Sequence
- POJ1141 Brackets Sequence(DP)
- Brackets Sequence poj1141
- POJ1141-Brackets Sequence
- poj1141 Brackets Sequence
- poj1141 Brackets Sequence 括号序列
- poj1141 Brackets Sequence 区间dp
- POJ1141 Brackets Sequence 区间DP
- POJ1141 Brackets Sequence 题解&代码
- poj1141 Brackets Sequence--区间dp
- poj1141 Brackets Sequence 动态规划 输出路径
- 获取网络运营商
- 屏蔽控件对按键消息的响应
- SSH框架总结(框架分析+环境搭建+实例源码下载)
- 黑马程序员---面向对象:this关键字
- Hibernate懒加载解析
- POJ1141 Brackets Sequence
- AES加密CBC模式兼容互通四种编程语言平台【PHP、Javascript、Java、C#】
- ASP.NET控件之Content控件
- 5天学会jaxws-webservice编程第一天
- 在VS2010中如何编译C,网上看到的,感觉很好
- .NET c# Color对象的使用介绍(转)
- 算法竞赛入门经典 例题8-1
- SVN使用教程之-分支/标记 合并 subeclipse
- NSRunLoop的一点理解