-
C - Brackets
- POJ - 2955
- 对于区间L,R如果str[L]==str[R] dp[L][R]=dp[L+1][R-1]+2转移而来
- 第一层for枚举长度
- 第二层for枚举再次长度下的始末点
- 第三层for切分求最优解
-
#include<iostream> #include<cstring> using namespace std; #define maxn 123 int dp[maxn][maxn],len,ans; char str[maxn]; int judge(char x,char y) { if(x=='('&&y==')') return 1; else if(x=='['&&y==']') return 1; else return 0; } int main() { while(cin>>str) { if(strcmp(str,"end")==0) break; ans=0; memset(dp,0,sizeof(dp)); len=strlen(str); for(int d=1; d<len; d++) for(int i=0,j; (j=i+d)<len; i++) { dp[i][j]=dp[i+1][j-1]+judge(str[i],str[j]); for(int k=i+1; k<j; k++) dp[i][j]=max(dp[i][j],dp[i][k]+dp[k][j]); } cout<<2*dp[0][len-1]<<endl; } return 0; }
C - Brackets POJ - 2955-区间DP
最新推荐文章于 2020-07-04 21:35:08 发布