注册 登录
编程论坛 C++教室

DP问题一定要用DP吗?

bbb222 发布于 2012-12-08 01:53, 494 次点击
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要如何用...
1 回复
#2
w5277050902012-12-09 01:09
DP?见识短浅啊。。。不知道这是什么玩意。。。
帮顶了
1