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 |
奇怪这道题???不服这样的AC一个动态规划!旁边说了Special Judge,等于说正确结果是不唯一的。 就拿测试数据来说吧: Sample Input ([(] Sample Output ()[()] 这确实是正确答案,但似乎([()])应该也是正确答案啊!!! for(i=1;i<len;i++) dp[i][i-1]=0; for(i=0;i<len;i++) dp[i][i]=1; for(s=1;s<len;s++) for(i=0;i<len-s;i++) { j=i+s; sum=INT_MAX; if(str[i]=='('&&str[j]==')'||str[i]=='['&&str[j]==']') {sum=dp[i+1][j-1];track[i][j]=-1;} if(str[i]=='('||str[i]=='[') { if(dp[i+1][j]+1<sum) {sum=dp[i+1][j]+1;track[i][j]=-2;} } if(str[i]==')'||str[i]==']') { if(dp[i][j-1]+1<sum) {sum=dp[i][j-1]+1;track[i][j]=-3;} } for(k=i;k<j;k++) { temp=dp[i][k]+dp[k+1][j]; if(temp<sum) { sum=temp; track[i][j]=k; } } dp[i][j]=sum; } 这样的dp应该是正确的!逻辑上时正确的。 改成了: for(i=1;i<len;i++) dp[i][i-1]=0; for(i=0;i<len;i++) dp[i][i]=1; for(s=1;s<len;s++) for(i=0;i<len-s;i++) { j=i+s; sum=INT_MAX; if(str[i]=='('&&str[j]==')'||str[i]=='['&&str[j]==']') {sum=dp[i+1][j-1];track[i][j]=-1;} /*if(str[i]=='('||str[i]=='[') { if(dp[i+1][j]+1<sum) {sum=dp[i+1][j]+1;track[i][j]=-2;} } if(str[i]==')'||str[i]==']') { if(dp[i][j-1]+1<sum) {sum=dp[i][j-1]+1;track[i][j]=-3;} }*/ for(k=i;k<j;k++) { temp=dp[i][k]+dp[k+1][j]; if(temp<sum) { sum=temp; track[i][j]=k; } } dp[i][j]=sum; } 却AC了。 明显上一种较这种更有前途对啊!!! 仔细看了看题: Some sequence of characters '(', ')', '[', and ']' is given. You are to find the shortest possible regular brackets sequence, that contains the given character sequence as a subsequence. Here, a string a1 a2 ... an is called a subsequence of the string b1 b2 ... bm, if there exist such indices 1 = i1 < i2 < ... < in = m, that aj = bij for all 1 = j = n. 最后一句话([()])也是满足的。 奇怪的AC!!! 希望以后知道为什么!~ Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator