括弧を削除します

 

タイトル説明

括弧はあなたに有効なシーケンスS1を与え、あなたは「()」を除去することができますたびに
、あなたがゼロ以上を削除することができます「()」
シーケンスを求めるには、別のブラケットS2に削除することができます

説明を入力します。

(≤| | S 2≤入力文字列sの最初の行 100) 
(≤2≤| | T文字列tの第二の入力ライン 100)

出力説明:

もしあなたを出力することができ、「可能性」
それ以外の場合は、出力「インポッシブル」
例1

エントリー

(()) 
()

輸出

可能
例2

エントリー

() 
()

輸出

可能
例3

エントリー

(()()()) 
((()))

輸出

不可能
例4

エントリー

((())((())())()) 
(()(())())

輸出

可能
例5

エントリー

((())((())())()) 
((()()()()()))

輸出

インポッシブル

アイデア:入力文字列が、ターゲット文字列bです。ブラケットは常に左ブラケットと右ブラケットの数よりも、または等しいが(最後に等しくなるように)ことを保証しなければならないときに削除
我々はDPを定義することができる[I] [J] [ k]は、一致する文字列Bの前に、iの文字列の前に検討を表しますjは、文字列が左ブラケット部から削除される-右括弧=実現可能性のk個、分類は議論を転送することができ、
最終的な答えがdp [n]は[M]が[ 0]

コード:
1の#include <cstdioを>
 2の#include <fstreamの>
 3の#include <アルゴリズム>
 4の#include <cmath>
 5の#include <両端キュー>
 6の#include <ベクトル>
 7の#include <キュー>
 8の#include < ストリング >
 9#含む<CStringの>
 10の#include <地図>
 11の#include <スタック>
 12の#include < セット >
 13の#include <sstream提供さ>
 14の#include <入出力ストリーム>
15件 の#define MOD十億七
 16  の#defineのEPS 1E-6
 17 #defineは長い長いちゃう
 18  の#define 0x3f3f3f3f INF
 19  使って 名前空間STDを、
20  
21  CHAR [ 110 ]、B [ 110 ]。
22  BOOL DP [ 110 ] [ 110 ] [ 110 ]。
23  のint main()の
 24  {
 25      のscanf(" %sの%sの"、(A + 1)、(B + 1 ))。
26      INT M = STRLEN(A + 1)、N = STRLEN(B + 1 )。
27     DP [ 0 ] [ 0 ] [ 0 ] = 1 28      のためには、int型 i = 0 ; iがm <; iは++ 29      {
 30          のためのint型 J = 0 ; J <= N; J ++ 31          {
 32              のためのint型のk = 0 ; K <= M; ++ kは33              {
 34                  であれば(DP [I] [J] [K])
 35                  {
 36                      であれば(!K && [I + 1 ] == B [J + 1 ])
37                      {
 38                          DP [I + 1 ] [j + 1 ] [K] = 1 39                      }
 40                      であれば([I + 1 ] == ' ' 41                      {
 42                          DP [I + 1 ] [j]を[K + 1 ] = 1 ;
 43                      }
 44                      他の 場合(K)
 45                      {
 46                          DP [I + 1 ] [J] [K- 1] = 1 47                      }
 48                  }
 49              }
 50          }
 51      }
 52      であれば(DP [M] [N] [ 0 ])
 53      {
 54          のprintf(" 可能\ nを" )。
55      }
 56      他の
57      {
 58          のprintf(" 不可の\ n " );
59      }
 60 }

 

おすすめ

転載: www.cnblogs.com/mzchuan/p/11388170.html