poj1141 Brackets Sequence(区间dp)
2016-02-19 15:59
441 查看
poj1141
分析
第一次做区间dp,讲解的话这微博主讲的很清楚了。http://www.cnblogs.com/neulike/archive/2011/02/12/1952600.html题目
http://poj.org/problem?id=1141代码
#include <cstdio> #include <algorithm> #include <vector> #include <cstring> #include <iostream> using namespace std; const int inf=0x3f3f3f3f; string s; int d[110][110],value[110][110],len; void fun() { for(int i=0; i<len; i++) d[i][i]=1; for(int tem=1; tem<len; tem++) for(int i=0; i<len-tem; i++) { int j=tem+i; d[i][j]=inf; if((s[i]=='('&&s[j]==')')||(s[i]=='['&&s[j]==']')) { d[i][j]=d[i+1][j-1]; value[i][j]=-1; } for(int k=i; k<j; k++) if(d[i][j]>d[i][k]+d[k+1][j]) { d[i][j]=d[i][k]+d[k+1][j]; value[i][j]=k; } } return; } void print(int i,int j) { if(i>j) return; else if(i==j) { if(s[i]==')'||s[i]=='(') printf("()"); if(s[i]==']'||s[i]=='[') printf("[]"); } else if(value[i][j]==-1) { printf("%c",s[i]); print(i+1,j-1); printf("%c",s[j]); } else { print(i,value[i][j]); print(value[i][j]+1,j); } return; } int main() { while(getline(cin,s)) { memset(d,0,sizeof(d)); len=(int)s.length(); fun(); print(0,len-1); printf("\n"); } }
相关文章推荐
- BlueStacks 使用说明
- iOS 轻松实现UITableViewCell 自适应高度
- Bluemix结合RabbitMq实现消息发送与接收实例
- IOS---NSdata 与 NSString,Byte数组,UIImage 的相互转换
- UICollectionViewLayout 学习(转)
- Fuel3D人脸扫描
- 12.关于UIWindow的总结
- UIUC大学之Coursera课程Text Retrieval and Search Engines:Week 4 Quiz
- UIUC大学之Coursera课程Text Retrieval and Search Engines:Week 3 Quiz
- UIUC大学之Coursera课程Text Retrieval and Search Engines:Week 4 Practice Quiz
- UIUC大学之Coursera课程Text Retrieval and Search Engines:Week 3 Practice Quiz
- UIUC大学之Coursera课程Text Retrieval and Search Engines:Week 2 Quiz
- UIUC大学之Coursera课程Text Retrieval and Search Engines:Week 2 Practice Quiz
- <转载>拒绝卡顿——在WPF中使用多线程更新UI
- UIInterpolatingMotionEffect
- requirejs+cdn
- Java 入门 之 WindowBuilder 与 Swing 的安装
- UIButton的setTitle,system,custom
- EasyGui使用
- UIView的clipsTobounds属性