題目描述
課堂上,felix 剛剛學習了關於括號序列的知識。括號序列是乙個只由左括號「(」
和右括號「)」構成的序列; 進一步的, 乙個合法的括號序列是指左括號和右括號能
夠 一一匹配的序列。
如果用規範的語言說明,乙個合法的括號序列可以有以下三種形式:
1 s=「」(空串) ,s 是乙個合法的括號序列;
2 s=xy,其中 x,y 均為合法的括號序列,則 s 也是乙個合法的括號序列;
3 s=(x),其中 x 為合法的括號序列,則 s 也是乙個合法的括號序列。
這時老師在黑板上寫出了乙個了括號序列:「()))()」。
felix 一眼就看出這個序列並不是合法的括號序列。
這時老師提出了乙個這樣的問題:能否在序列中找出連續的一段,把這一段裡面
的左括號變成右括號,右括號變成左括號,變換之後整個序列可以變成合法的呢?
felix 想到,可以把[3..5]進行調換,這樣序列就會變為()(()),是乙個合法的序列。
很明顯,不止有一種方法可以使整個序列變合法。
這時,老師又在黑板上寫出了乙個長度為 n 的括號序列。felix 想,能否對這個
序列進行至多一次變換,使它變合法呢?
輸入 第一行乙個整數 t,代表資料的組數;接下來 t 行,每一行一組資料。
每組資料一行,代表給出的括號序列。
輸出 輸出共 t 行,對於每組資料,輸出「possible」(可以變換)或「impossible」(不可變
換) 。 (不含引號)
樣例 3
()))
)))(
() possible
impossible
possible
資料範圍
對於 50%的資料,t<=5, n<=20;
對於 100%的資料,t<=10, n<=5000.
50分:暴力列舉改變的區間,然後再o(n)判斷。
100分:dp,如果是左括號,a[i]=1 , 右括號 , a[i]=-1
對於 100% 的資料,需要使用動態規劃解決。注意到一次變換操作
把序列劃分成三段,前段與後段都沒有修改。
所以我們可以使用動態規劃:設 f[i][j][k] 為決定到前 i 位,目前的前
綴和為 j,並且現在第 i 位處於第 k 段(0 代表前,1 代表中,2 代
表後) ,是否可能。
dp 的轉移方程為新增一位 i+1;i+1 位可以仍然與第 i 位位於同一段,
也可以位於不同的一段。最後的結果就是看 f[n][0] 是否可能。
時間複雜度:o(n^2*3)
50分
#include
#include
#include
#include
#define ll long long
#define i "impossible\n"
#define p "possible\n"
using
namespace
std;
int n,s[5009],sl[5009],sr[5009],len;
char c[5009];
bool check()
return sl[len]==sr[len];
}int main()
for(int k=i;k<=j;k++) s[k]^=1;
}if(flag) break;
}if(!flag) printf(i);
}return
0;}
100分
#include
#include
#include
#include
#define ll long long
#define i "impossible\n"
#define p "possible\n"
using
namespace
std;
int n,t;
char s[5009];
int f[2][5009][3],a[5009];
void solve()
if(f[now^1][j][1])
if(f[now^1][j][2])
}now^=1;
}now^=1;
for(int i=0;i<3;i++)
if(f[now][0][i])
printf(i);
}int main()
solve();
}return
0;}
NOIP模擬題 子串行
描述 給定3個字串,求它們的最長公共子串行。輸入 第一行乙個整數n,表示三個字串的長度 接下來三行,每行是乙個長度為n只包含小寫字母的字串。輸出 輸出最長公共子串行的長度。輸入樣例 4abac abbc cbca 輸出樣例 2提示 30 n 10 100 n 120 三維dp,道理和兩個字串的lcs...
NOIP模擬 序列
問題描述 乙個序列被稱為有趣的序列是它的所有的子串擁有乙個唯一的整數 這個整數在整個序 列中只出現過一次 給你乙個序列的整數,問你它是否是有趣的。輸入格式 第一行 t,表示資料組數。接下來每組資料第一行乙個 n。接下來是 n 個整數,均小於 10 9。輸出格式 輸出 boring 或者 non bo...
NOIP模擬 序列操作
2017.11.06t2 好氣,我這道題寫的權值線段樹,結果維護的時候搞忘清零了,只有 20 分,加上清零就 a了,當然我是指的評測機上ac,在 oj 上要 t 一些點,有點小氣。我用權值線段樹,在修改的時候加了乙個 lo g2h 但我的詢問是 lo g2h 的,比較已經過了的 修改是 o h 詢問...