NYOJ 15

来源:互联网 发布:淘宝卖家漏发货怎么办 编辑:程序博客网 时间:2024/05/21 22:51
#include<cstdio>#include<cstring>int t;char a[101];int dp[101][101];//这里dp的是:从第i个字符到第j个字符之间有多少个括号需要加入匹配。void getdp(char * a){memset(dp,0,sizeof(dp[0][0]));for(int i=0;i<101;i++)dp[i][i]=1;//初始化dpfor(int j=1;j<strlen(a);j++)//第i~j-1个字符到j所需要的括号数。for(int i=0;i<j;i++){/* if(a[j]=='('||a[j]=='['){dp[i][j]=dp[i][j-1]+1;continue;} */int k=j;dp[i][j]=dp[i][j-1]+1;for(;k>=i;k--){if(a[k]=='['&&a[j]==']'||a[k]=='('&&a[j]==')'){if(dp[i][j]>dp[i][k-1]+dp[k+1][j-1]){dp[i][j]=dp[i][k-1]+dp[k+1][j-1];}}}}}int main(){/*1.当i==j时,dp的值必定为1.2.当char[i]与char[j]匹配时,dp[i][j]=dp[i+1][j-1];3.当char[i]与char[j-1]之间有与char[j]匹配的字符char[k]  k>=i&&k<=j-1dp[i][j]=dp[i][k-1]+dp[k+1][j-1];(由2推导)注意存在多个k的情况,取dp[i][k-1]+dp[k+1][j-1]最小的情况。4.当不存在k时dp[i][j]=dp[i][j-1]+1;*/scanf("%d",&t);getchar();//清缓存while(t--){gets(a);getdp(a);printf("%d\n",dp[0][strlen(a)-1]);/* for(int i=0;i<strlen(a);i++){for(int j=0;j<strlen(a);j++)printf("%2d",dp[i][j]);puts("");} */}return 1;}

0 0
原创粉丝点击