DP问题一定要用DP吗?
Let us define a regular brackets sequence in the following way:Empty sequence is a regular sequence.
If S is a regular sequence, then (S) and [S] are both regular sequences.
If A and B are regular sequences, then AB is a regular sequence.
For example, all of the following sequences of characters are regular brackets sequences:
(), [], (()), ([]), ()[], ()[()]
And all of the following character sequences are not:
(, [, ), )(, ([)], ([(]
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 a1a2...an is called a subsequence of the string b1b2...bm, if there exist such indices 1 ≤ i1 < i2 < ... < in ≤ m, that aj=bij for all 1 ≤ j ≤ n.
Input
The input file contains at most 100 brackets (characters '(', ')', '[' and ']') that are situated on a single line without any other characters among them.
Output
Write to the output file a single line that contains some regular brackets sequence that has the minimal possible length and contains the given sequence as a subsequence.
Sample input
([(]
Sample output for the sample input
()[()]
#include <iostream>
using namespace std;
int main()
{
string str,s;
while(cin >> str)
{
int leng,a,b,c,d;
a=0;b=0;c=0;d=0;
leng = str.length();
for(int i = 0; i < leng; i++)
s[i] = str[i];
for(int k = 0; k < leng-1; k++)
for(int j = 0; j < leng-k-1; j++)
{
if(str[j] == '['&&str[j+k+1] == ']')
{
str[j] = '1';
str[j+k+1] = '1';
}
if(str[j] == '{'&&str[j+k+1] == '}')
{
str[j] = '1';
str[j+k+1] = '1';
}
}
for(int l = 0; l < leng; l++)
{
if(str[l] == '['|| str[l] == ']')
cout << "[]";
else if(str[l] == '{'|| str[l] == '}')
cout << "{}";
else
cout << s[l];
}
cout << endl;
}
return 0;
}
我的代码一直通过不了...
求教DP要如何用...