bzoj1090 字串摺疊

2022-03-27 07:33:03 字數 877 閱讀 8666

問題描述

摺疊的定義如下: 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。

題解引用hzwer

dp[l][r]表示l~r的最短摺疊長度

即可推出:dp[l][r]=min(r-l+1,dp[l][k]+dp[k+1][r])l<=k當k+1~r可以由l~k重複得到時還要:dp[l][r]=min(dp[l][r],dp[l][k]+2+calc((r-l+1)/(k-l+1)));//calc用來計算乙個十進位制數所佔位數

答案就是dp[0][len-1];

#includeusing

namespace

std;

int f[110][110

];char s[110

];bool vis[110][110

];bool judge(int l,int r,int cl,int

cr)

return1;

}int

get(int

x)

returnt;}

int dp(int l,int

r) }

return f[l][r]=t;

}int

main()

BZOJ 1090 字串摺疊 區間DP

很明顯的區間dp,設dp l r 表示 l,r 區間的字串摺疊後的最小長度。可以通過兩種方向轉移,dp l r min dp l i dp i 1 r 另一種是摺疊,dp l r min dp l l k 1 cal r l 1 k 2 其中k是能整除 r l 1 的數且區間能夠摺疊成k份,cal ...

bzoj1090(區間dp,字串摺疊問題)

這個問題比上乙個簡單一點,應該對比一下兩題的相似與不同點,來找到解題的技巧 這題是用遞推實現的,不用記憶化。f l r 表示,把l r這個區間摺疊的最短長度,然後我們想,對於乙個區間來說,我們有兩種選擇,一種是把這個區間它自己來摺疊,另一種是兩塊已經摺疊的區間接起來。對於第二中情況,直接列舉斷點 兩...

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 ...