bzoj1090 SCOI2003 字串摺疊

2022-05-01 06:54:09 字數 1039 閱讀 9912

time limit: 10 sec  memory limit: 162 mb

submit: 1718  solved: 1146

[submit][status][discuss]

摺疊的定義如下: 1. 乙個字串可以看成它自身的摺疊。記作s  s 2. x(s)是x(x>1)個s連線在一起的串的摺疊。記作x(s)  ssss…s(x個s)。 3. 如果a  a』, bb』,則ab  a』b』 例如,因為3(a) = aaa, 2(b) = bb,所以3(a)c2(b)  aaacbb,而2(3(a)c)2(b)aaacaaacbb 給乙個字串,求它的最短摺疊。例如aaaaaaaaaabababccd的最短摺疊為:9(a)3(ab)ccd。

僅一行,即字串s,長度保證不超過100。

僅一行,即最短的摺疊長度。

neercyesyesyesneercyesyesyes

14乙個最短的摺疊為:2(neerc3(yes))

分析:一開始覺得和bzoj1068差不多.用那道題的狀態去推狀態轉移方程發現不是那麼容易推.因為這裡括號必須要是匹配的,而那一題並不要求r,m匹配.

實際上這道題還要簡單一些,區間dp的基本狀態表示方法:f[l][r]就能夠轉移.

兩種方式:1.f[l][r] = min.  2.f[l][r] = min.這兩個轉移分別是將子區間合併和將字串摺疊.

#include #include 

#include

#include

using

namespace

std;

char s[110

];int n,f[110][110

];int cal(int

x)bool check(int l,int mid,int

r)

return

true;}

intmain()}}

printf(

"%d\n

",f[1

][n]);

return0;

}

BZOJ1090 SCOI2003 字串摺疊

給出乙個字串,可以將相鄰的重複的子串合併在一起,如 abaaaabba,可以合併為ab4 a bba 注意,數字和括號均算作字元,數字有多少位就相當於有多少個字元 請問怎麼合併才能使字串的長度最小 也可以不合併 區間dp,本來想著會t,結果應該是不會詢問這麼多遍,所以耗時可觀 f i j 表示第i個...

BZOJ1090 SCOI2003 字串摺疊

摺疊的定義如下 1.乙個字串可以看成它自身的摺疊。記作 s s 2.x s 是 x x 1 個 s 連線在一起的串的摺疊。記作 x s ssss s x 個 s 3.如果 a a b b 則 ab a b 例如,因為 3 a aaa 2 b bb 所以 3 a c2 b aaacbb 而 2 3 a...

1090 SCOI2003 字串摺疊

題目鏈結 題目大意 摺疊的定義如下 1.乙個字串可以看成它自身的摺疊。2.x s 是x x 1 個s連線在一起的串的摺疊,記作x s 3.摺疊可以巢狀。給乙個字串,求它的最短摺疊。題解 區間dp f l r 表示 l r 壓縮後最短長度,初始值f l r r l 1 轉移 列舉區間分割點k,l k ...