Brackets POJ - 2955
区间dp
算是经典的区间dp问题
但是我上来写错了,,,唉
我的思路错了,还是要小心啊
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int dp[110][110];
char s[110];
int n;
bool check(char s1,char s2){
return (s1=='('&&s2==')')||(s1=='['&&s2==']');
}
int main(){
while (scanf("%s",s+1)){
if (s[1]=='e')break;
n = strlen(s+1);
memset(dp,0,sizeof(dp));
for (int p=2;p<=n;++p){
for (int i=1,j=i+p-1;j<=n;++i,++j){
if (check(s[i],s[j]))dp[i][j]=dp[i+1][j-1]+2;
for (int k=i;k<j;++k)dp[i][j]=max(dp[i][k]+dp[k+1][j],dp[i][j]);
}
}
printf("%d\n",dp[1][n]);
}
}Kuangbin题单详解(区间dp) 文章被收录于专栏
lets go
