Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
求测试数据 WHY WA----完全按照<黑书>DP#include<iostream> using namespace std; #define MAXN 200 #define maxn 20000000 int sav[MAXN][MAXN]={0},adds[MAXN][MAXN]={0},dp[MAXN][MAXN]={0},slen; char str[MAXN],s[MAXN]; void DP_solve() { int i,j,k,step; for(i=0;i<slen;++i) { dp[i][i]=1; if('('==str[i]) adds[i][i]=2; else if(')'==str[i]) adds[i][i]=1; else if('['==str[i]) adds[i][i]=4; else if(']'==str[i]) adds[i][i]=3; } for(i=0;i<slen;++i) for(j=0;j<slen;++j) sav[i][j]=-1; for(step=0;step<slen;++step) for(i=0;i<slen-step;++i) { j=i+step; dp[i][j]=maxn; if((str[i]=='('&&str[j]==')')||(str[i]=='['&&str[j]==']')) if(dp[i][j]>dp[i+1][j-1]){ dp[i][j]=dp[i+1][j-1]; adds[i][j]=0; } if(str[i]=='(') if(dp[i][j]>dp[i+1][j]+1){ dp[i][j]=dp[i+1][j]+1; adds[i][j]=1; } if(str[j]==')') if(dp[i][j]>dp[i][j-1]+1){ dp[i][j]=dp[i][j-1]+1; adds[i][j]=2; } if(str[i]=='[') if(dp[i][j]>dp[i+1][j]+1){ dp[i][j]=dp[i+1][j]+1; adds[i][j]=3; } if(str[i]==']') if(dp[i][j]>dp[i][j-1]+1){ dp[i][j]=dp[i][j-1]+1; adds[i][j]=4; } for(k=i;k<j;++k) { if(dp[i][j]>dp[i][k]+dp[k+1][j]) { dp[i][j]=dp[i][k]+dp[k+1][j]; sav[i][j]=k; } } // cout<<i<<":"<<j<<":"<<dp[i][j]<<":"<<sav[i][j]<<endl; } } void output(int i,int j) { // cout<<i<<':'<<j<<endl; if(i>j) return; if(-1==sav[i][j]){ if(0==adds[i][j]){ if(str[i]!=' ')cout<<str[i]; output(i+1,j-1); if(str[i]!=' ')cout<<str[j]; return; } if(1==adds[i][j]){ cout<<'('; output(i+1,j); cout<<')'; }else if(2==adds[i][j]){ cout<<'('; output(i,j-1); cout<<')'; }else if(3==adds[i][j]){ cout<<'['; output(i+1,j); cout<<']'; }else if(4==adds[i][j]){ cout<<'['; output(i,j-1); cout<<']'; } }else{ output(i,sav[i][j]); output(sav[i][j]+1,j); } } int main() { scanf("%s",s); slen=0; for(int p=0;s[p]!='\0';++p) if(s[p]!=' ') str[slen++]=s[p]; str[slen]='\0'; // cout<<str<<endl; if(str==""){ cout<<endl; } DP_solve(); output(0,slen-1); cout<<endl; return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator