SCOI2003 字串摺疊

2022-05-08 01:39:08 字數 1068 閱讀 6318

摺疊的定義如下:

乙個字串可以看成它自身的摺疊。記作s = s

x(s)是x(x>1)個s連線在一起的串的摺疊。記作x(s) = ssss…s(x個s)。

如果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。

輸出格式:

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

輸入樣例#1: 

neercyesyesyesneercyesyesyes

輸出樣例#1: 

14

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

分析:

本題顯然是區間dp, 用f[i][j]表示從第i個字元到第j個字元的最小長度,然後列舉中間斷點,進行狀態轉移即可。

code:

1 #include 2 #include 3 #include 4 #include 5 #include 6

using

namespace

std;

7const

int m=105;8

char

a[m];

9int

f[m][m],n;

10 inline int

read()

19int count(int

x)24

intmain()

39if (flag) f[i][j]=min(f[i][j],count((l+1)/k)+2+f[i][i+k-1

]);40}41

}42 printf("

%d",f[1

][n]);

43return0;

44 }

SCOI2003 字串摺疊

scoi2003 字串摺疊 時間限制 c c 1秒,其他語言2秒 空間限制 c c 262144k,其他語言524288k 64bit io format lld摺疊的定義如下 乙個字串可以看成它自身的摺疊。記作s s x s 是x x 1 個s連線在一起的串的摺疊。記作x s ssss s x個s...

SCOI2003 字串摺疊

題目傳送門 dp 的實現也要下一下功夫,比如這題,知道轉移方程卻不會實現 定義f i j 為區間 i,j 摺疊的最短長度 然後就是區間 dp 的套路,列舉中間斷點,然後轉移 如何判斷能否摺疊,以及摺疊後的處理沒有想到 還要多加練習 include include include include de...

SCOI2003 字串摺疊

摺疊的定義如下 乙個字串可以看成它自身的摺疊。記作s s x s 是x x 1 個s連線在一起的串的摺疊。記作x s ssss s x個s 如果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 ...