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

2021-07-16 20:14:09 字數 851 閱讀 7844

這個問題比上乙個簡單一點,應該對比一下兩題的相似與不同點,來找到解題的技巧

這題是用遞推實現的,不用記憶化。

f【l】【r】表示,把l~r這個區間摺疊的最短長度,

然後我們想,對於乙個區間來說,我們有兩種選擇,一種是把這個區間它自己來摺疊,另一種是兩塊已經摺疊的區間接起來。

對於第二中情況,直接列舉斷點(兩道題中都用到的思路),再和答案取min,第一種則是,找出它所有的摺疊方案,在摺疊方案中取乙個最優的

首先這都是兩道有關字串壓縮的題目,整體的思路都是對於一段區間,兩類決策

1:由子問題更新的最優決策2:該區間本身進行壓縮(進行處理)的最優決策

但是bzoj1068,m與r構成類似大括號進行壓縮,但是乙個m對應了不止乙個r,這就是麻煩所在(不好轉移),bzoj1090,就是括號對應括號,相對形象

#include#include#include#include#includeusing namespace std;

const int inf=0x3f3f3f3f;

int f[105][105],g[105][105],n;

char s[105];

inline int tt(int x)

bool pan(int l,int r,int len)

return true;

}int main()

{ scanf("%s",s+1);

n=strlen(s+1);

for (int l=n;l>=1;l--)

{ f[l][l]=1;

for (int r=l+1;r<=n;r++)

{ f[l][r]=r-l+1;

for (int i=l;i

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 字串摺疊

問題描述 摺疊的定義如下 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 ...

字串摺疊 區間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 ...