poj 1141 Brackets Sequence

<textarea cols="91" rows="22" name="code" class="cpp">// source code of submission 343733, Zhongshan University Online Judge System #include &lt;iostream&gt; #include &lt;cstdio&gt; #include &lt;cstdlib&gt; #include &lt;cstring&gt; #include &lt;cmath&gt; #include &lt;algorithm&gt; #include &lt;queue&gt; #include &lt;stack&gt; using namespace std; const int inf = 1&lt;&lt;28; char str[1000]; int dp[1000][1000]; int f[1000][1000]; void print(int i,int j){ if (i&gt;j) return ; if (i==j) { if (str[i] == '(' || str[i] == ')') printf("()"); else printf("[]"); return ; } if (f[i][j] == -1){ printf("%c",str[i]); print(i+1,j-1); printf("%c",str[j]); return ; } print(i,f[i][j]-1); print(f[i][j],j); } int main() { int length,temp; while (gets(str)){ length = strlen(str); if (length==0){ printf("/n"); continue; } memset(dp,0,sizeof(dp)); memset(f,0,sizeof(f)); for (int i=0;i&lt;length;i++) for (int j=i+1;j&lt;length;j++) dp[j][i]= inf; for (int i=0;i&lt;length;i++) { dp[i][i] = 1; if (str[i] == '(' || str[i]=='[') f[i][i] = i; else f[i][i] = i+1; dp[i+1][i] = 0; } for (int len = 2;len&lt;=length; len++) for (int i=0;i&lt;=length-len;i++){ int j = i+len-1; dp[i][j] = inf; if (str[i] == '(' &amp;&amp; str[j] == ')' || str[i]=='[' &amp;&amp; str[j]==']') { if (dp[i][j]&gt;dp[i+1][j-1]){ dp[i][j] = dp[i+1][j-1]; f[i][j] = -1; } } for (int k=i+1;k&lt;=j;k++){ if (dp[i][k-1]+dp[k][j]&lt; dp[i][j]){ dp[i][j] = dp[i][k-1]+dp[k][j]; f[i][j] = k; } } } print(0,length-1); printf("/n"); } system("pause"); return 0; } </textarea>

你可能感兴趣的:(poj 1141 Brackets Sequence)