国产探花免费观看_亚洲丰满少妇自慰呻吟_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;}如有不當之處歡迎指出!


上一篇:乘車

下一篇:多項式輸出

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 屏山县| 永嘉县| 湖口县| 开鲁县| 八宿县| 岐山县| 喀什市| 阿瓦提县| 措美县| 大连市| 金昌市| 华宁县| 巍山| 巴青县| 蕲春县| 辽中县| 潞西市| 股票| 桦甸市| 潢川县| 南阳市| 当涂县| 安阳市| 武义县| 南陵县| 海淀区| 德昌县| 利辛县| 博湖县| 安丘市| 同江市| 华坪县| 新昌县| 德令哈市| 南澳县| 昆明市| 武隆县| 江门市| 西青区| 上蔡县| 广元市|