字串摺疊 區間dp

2022-08-26 10:12:12 字數 1216 閱讀 8744

摺疊的定義如下:

乙個字串可以看成它自身的摺疊。記作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
輸出

複製

14

思路:

#include#include

#define ll long long

using

namespace

std;

const

int mmax=2e2+5

;char

s[mmax];

intdp[mmax][mmax];

bool check(int l1,int r1,int l2,int r2) ///

[l1,r1]是主串

return

true;}

int dfs(int l,int

r) }

}int

main()

else dp[l][r]=min(dp[l][r],dp[l][k]+dp[k+1

][r]);

}else

if(len2%len1==0) ///

len2>len1

else dp[l][r]=min(dp[l][r],dp[l][k]+dp[k+1

][r]);

}else dp[l][r]=min(dp[l][r],dp[l][k]+dp[k+1

][r]);}}

}printf(

"%d\n

",dp[1

][len]);

return0;

}

字串摺疊 壓縮(區間DP)

字串摺疊 摺疊的定義如下 乙個字串可以看成它自身的摺疊。記作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 aaacaa...

SCOI 2003 字串摺疊(區間 dp)

求乙個字串的最短可巢狀壓縮長度。如aaaaaaaaaabababccd最短為9 a 3 ab ccd。1 s 100 1 leq s leq 100 1 s 100對於乙個字串,令 fi,jf fi,j 為 i,j i,j i,j 的最短壓縮長度,有三個壓縮。原串形式,將 fi,jf fi,j 賦初...

SCOI2003 字串摺疊(區間dp)

摺疊的定義如下 乙個字串可以看成它自身的摺疊。記作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 ...