poj 1141 Brackets Sequence
2015-08-01 23:05
316 查看
暂时没有什么思路,最经学习动态规划,还是没有入门。
#include<iostream> #include<string.h> #include<math.h> #include<fstream> #include<algorithm> #include<stdio.h> #include<queue> #include<vector> #define MAXSIZE 100 using namespace std; const int INF = 1<<30; #define max(a, b) ((a) > (b) ? (a) : (b)) #define min(a, b) ((a) < (b) ? (a) : (b)) #define MAX 19931117 #define finish -1 #define final -2 #define bracket -3 int dyna[110][110], record[110][110]; char ar[110]; void detre (int i, int j, char *ans) { char t1[220], t2[220]; int k; if (record[i][j] == finish) { if (ar[i] == '(' || ar[i] == ')') sprintf(ans, "()"); else sprintf(ans, "[]"); return; } else if (record[i][j] == final) { sprintf(ans, "%c%c", ar[i], ar[j]); return; } else if (record[i][j] == bracket) { detre(i + 1, j - 1, t1); if (ar[i] == '(') sprintf(ans, "(%s)", t1); else sprintf(ans, "[%s]", t1); return; } else { k = record[i][j]; detre(i, k, t1); detre(k + 1, j, t2); sprintf(ans, "%s%s", t1, t2); return; } } int main () { //freopen("data_1141.txt","r",stdin); int i, j, k, n, t, l; char ans[220]; gets(ar); l = strlen(ar); if (l == 0) printf("\n"); else { for (i = 0; i < l; i++) dyna[i][i] = 1, record[i][i] = finish; for (n = 1; n < l; n++) { for (i = 0; i + n < l; i++) { j = i + n; dyna[i][j] = MAX; if ((ar[i] == '(' && ar[j] == ')') || (ar[i] == '[' && ar[j] == ']')) { if (n == 1) dyna[i][j] = 0, record[i][j] = final; else { dyna[i][j] = dyna[i + 1][j - 1]; record[i][j] = bracket; } } t = record[i][j]; for (k = i; k < j; k++) { if (dyna[i][k] + dyna[k + 1][j] < dyna[i][j]) { dyna[i][j] = dyna[i][k] + dyna[k + 1][j]; t = k; } } record[i][j] = t; } } detre(0, l - 1, ans); printf("%s\n", ans); } return 0; }
相关文章推荐
- powerbuilder 与sqlite3数据库
- 【Android UI】ListView系列二(自定义Adapter订阅新闻栏目)
- thinkpad T430s 在win8上安装ubuntu双系统(UEFI开启)
- UE删除空行
- UIKit框架-11.控制器跳转(UIStoryboardSegue)
- VK Cup 2015 - Finals, online mirror F - Clique in the Divisibility Graph dp
- 将UE添加到右键菜单
- request.getParameter() request.getAttribute()的区别
- priority_queue使用
- STL学习记录(十六):Queue、Priority Queue
- UI03_LTView(继承UIView)和UIAlertView
- stringbuffer 和 stringbuilder的区别
- 源泉书签,今日更新: 编辑页面和删除页面的UI优化
- CocoaPods 的又一个小坑 required by `Podfile`
- UITabBar自定义方式四(中间无按钮)
- UITextField(可以输入文本),改变return样式,键盘回收,添加辅助视图
- UILabel
- The Longest Increasing Subsequence (LIS)
- UI02_UIButton和UITextField
- 浅谈String、StringBuffer、StringBuilder