http://10.16.23.21:8080/JudgeOnline/showproblem?problem_id=1897
(1)简化版的括号序列;
(2)dp顺序,长度由0起递增,以便于递推的实现。
具体代码:
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
#include<stdio.h> #include<string.h> #define N 300 char ch[N]; int dp[N][N] ; int main() { int i, j, k, t, n; while(scanf("%s", ch)!=EOF) { if(strcmp(ch, "end")==0) break; n=strlen(ch); memset(dp, 0, sizeof(dp)); for(k=0;k<n;k++) for(i=0,j=k;j<n;i++,j++) { if(ch[i]=='('&&ch[j]==')'||ch[i]=='['&&ch[j]==']') dp[i][j]>?=dp[i+1][j-1]+2; for(t=i;t<j;t++) dp[i][j]>?=dp[i][t]+dp[t+1][j]; } printf("%d\n", dp[0][n-1]); } return 0; }