POJ 2955(区间dp)

来源:互联网 发布:dnf刷图老是网络中断 编辑:程序博客网 时间:2024/05/16 04:53
//简单区间DP
//题意: 给你一串括号 问你最多有几个可以匹配
// dp[i][j]表示从i到j 最多可以匹配的括号数
// dp[i][j]=max(dp[i][j],dp[i+1][k-1]+dp[k+1][j]+2)(str[i]与str[k]可以匹配)


#include<stdio.h>
#include<string.h>


#define N 110
#define max(a,b) a>b?a:b;


int dp[N][N];
char str[N];
int len;


void Dp()
{
int i,j,k;
for(i=len-1;i>=0;i--)
{
for(j=i+1;j<=len-1;j++)
{
dp[i][j]=dp[i+1][j];
for(k=i+1;k<=j;k++)
if(str[i]=='('&&str[k]==')'||str[i]=='['&&str[k]==']')
dp[i][j]=max(dp[i][j],dp[i+1][k-1]+dp[k+1][j]+2);
}
}

}
int main()
{
while(gets(str),strcmp(str,"end"))
{

len=strlen(str);
memset(dp,0,sizeof(dp));
Dp();
printf("%d\n",dp[0][len-1]);
}
}
原创粉丝点击