国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

UVA 1626 Brackets sequence 區間DP

2019-11-08 02:34:41
字體:
來源:轉載
供稿:網友

    題意:給定一個括號序列,將它變成匹配的括號序列,可能多種答案任意輸出一組即可。注意:輸入可能是空串。

   思路:D[i][j]表示區間[i, j]至少需要匹配的括號數,轉移方程D[i][j] = min(D[i][k] + D[k+1][j], D[i][j]).

    輸入時,可能是空串應該用gets、fgets、getline,應注意換行符的吸收。每組數據前有一個換行符,輸出的兩組數據之間有換行。

AC代碼:

#include<cstdio>#include<vector>#include<algorithm>#include<cstring>#include<utility>#include<string>#include<iostream>using namespace std;#define eps 1e-10#define inf 0x3f3f3f3f#define  PI pair<int, int> const int maxn = 100 + 5;char s[maxn];int d[maxn][maxn];bool match(char a, char b) {	if(a == '(' && b == ')' || a == '[' && b == ']') return true;	return false;}void PRint(int i, int j) {	if(i > j) return;	if(i == j) {		if(s[i] == '(' || s[i] == ')') printf("()");		else printf("[]");	}	int ans = d[i][j];	if(match(s[i], s[j]) && d[i+1][j-1] == ans) {		printf("%c", s[i]); 		print(i+1, j-1);		printf("%c", s[j]);		return;	}	for(int k = i; k < j; ++k) {		if(d[i][k] + d[k+1][j] == ans) {			print(i, k);			print(k+1, j);			return;		}	}}void solve(int n) {	//初始化邊界	for(int i = 0; i < n; ++i) {		d[i + 1][i] = 0;		d[i][i] = 1;	}	for(int i = n - 2; i >= 0; --i) 		for(int j = i + 1; j < n; ++j) {			d[i][j] = n;  //最多需要匹配N個括號 			if(match(s[i], s[j])) d[i][j] = min(d[i][j], d[i+1][j-1]);			for(int k = i; k < j; ++k) {				d[i][j] = min(d[i][k] + d[k+1][j], d[i][j]);			}	}	print(0, n - 1);}int main() {	int T;	scanf("%d", &T);	getchar();	int kase = 0;	while(T--){		if(kase++) {			printf("/n"); 		} 		getchar();		fgets(s, sizeof(s), stdin);		int n = strlen(s);		if(n == 1) {			printf("/n");			continue; //空串		}		solve(n - 1);		printf("/n");	}	return 0;}如有不當之處歡迎指出!


上一篇:乘車

下一篇:多項式輸出

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 双鸭山市| 梁山县| 边坝县| 兴宁市| 耿马| 元氏县| 江山市| 镇巴县| 永顺县| 庆云县| 颍上县| 神木县| 文安县| 开化县| 灵台县| 年辖:市辖区| 建阳市| 曲麻莱县| 瑞昌市| 鲁山县| 子洲县| 淳化县| 大悟县| 育儿| 比如县| 铜鼓县| 鹤庆县| 吉水县| 留坝县| 武穴市| 浦县| 佛坪县| 改则县| 漳州市| 建德市| 南丰县| 宜州市| 财经| 方城县| 肇东市| 灌阳县|