這個問題比上乙個簡單一點,應該對比一下兩題的相似與不同點,來找到解題的技巧
這題是用遞推實現的,不用記憶化。
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 ...