時間限制:c/c++ 1秒,其他語言2秒
空間限制:c/c++ 524288k,其他語言1048576k
64bit io format: %lld
給你乙個合法的括號序列s1,每次你可以刪除乙個"()"
你可以刪除0個或者多個"()"
求能否刪成另乙個括號序列s2
第一行輸入乙個字串s (2 ≤ |s| ≤ 100)第二行輸入乙個字串t (2 ≤ |t| ≤ 100 )
如果可以輸出"possible"示例1否則輸出"impossible"
複製
(())複製()
possible示例2
複製
()複製()
possible示例3
複製
(()()())複製((()))
impossible示例4
複製
((())((())())())複製(()(())())
possible示例5
複製
((())((())())())複製((()()()()()))
impossible
子任務1: |s| <= 10先觀察這道題.題目所說的可刪的括號必須相鄰且"可動態",即((()()))在刪()()後,可繼續刪(),再刪().子任務2: |s| <= 20
子任務3: 無限制
如果一對()一對()dp的話,記錄每一對的位置及存在性會很麻煩,或許要2^50的複雜度,很明顯不行
不如用k = 刪掉的'('數 - 刪掉的')'數,當k = 0時,操作可行(因為有重要前提s1合法)
想到這裡思路就應該很清晰了:
菜雞只想到了模擬~~~
那個「合法」二字很重要,讀題的時候並沒注意
#includeusing namespace std;
typedef long long ll;
char a[105],b[105];
bool dp[105][105][55];
int main()
}} }
if(dp[la][lb][0]) printf("possible\n");
else printf("impossible\n");
return 0;
}
一二計畫(Day 2)DP 刪括號
題目 動態規劃要找對變數以及變數之間的關係 我們設定dp i j k 主要的變數就是計算多餘額外的左括號 表示a字串前i個刪除k個左括號構成b字串 關係為i與i 1之間的關係 詳見 include include int dp 110 110 110 dp i j k 表示a字串前i個刪除k個左括號...
刪括號 判斷可行性的dp
給你乙個合法的括號序列s1,每次你可以刪除乙個 你可以刪除0個或者多個 求能否刪成另乙個括號序列s2 輸入描述 第一行輸入乙個字串s 2 s 100 第二行輸入乙個字串t 2 t 100 輸出描述 如果可以輸出 possible 否則輸出 impossible 示例1 輸入複製 輸出 複製 poss...
牛客 刪括號
給你乙個合法的括號序列s1,每次你可以刪除乙個 你可以刪除0個或者多個 求能否刪成另乙個括號序列s2 第一行輸入乙個字串s 2 s 100 第二行輸入乙個字串t 2 t 100 如果可以輸出 possible 否則輸出 impossible possible possible impossible ...