1. 程式人生 > >【JZOJ3853】【NOIP2014八校聯考第2場第2試9.28】幫助Bsny(help)

【JZOJ3853】【NOIP2014八校聯考第2場第2試9.28】幫助Bsny(help)

EVRT

Bsny的書架亂成一團了,幫他一下吧!
他的書架上一共有n本書,我們定義混亂值是連續相同高度書本的段數。例如,如果書的高度是30,30,31,31,32,那麼混亂值為3;30,32,32,31的混亂值也為3。但是31,32,31,32,31的混亂值為5,這實在是太亂了。
Bsny想盡可能減少混亂值,但他有點累了,所以他決定最多取出k本書,再隨意將它們放回到書架上。你能幫助他嗎?
1≤k≤n≤100,注意所有書本高度在[25,32]。

COMEHERE

首先如果考慮動態規劃的話,會設定f[i][j],表示表示前i本書中,有j本書被抽走。
再想想會加上第三維k,表示沒被抽走的書中最後一本書的高度是k


顯然轉移方程有兩種:

1.不抽走當前這本書,容易推;
2.抽走當前這本書,但要放在哪呢?
(1)放在另一本和這本書的高度相同的書旁邊;
(2)放在開頭,自成一家。

討論第(1)種情況,
–如果這所謂的“另一本”在這本書的前面,由於書的高度只有8種,所以考慮加上第四維l,表示沒被抽走的書的高度出現情況壓位(28)。

–如果這所謂的“另一本”在這本書的後面,容易得出這本書後面是否有另一本相同高度的書,預處理出來就可以。

f[i][j][k][l],表示前i本書中,有j本書被抽走,沒被抽走的書中最後一本書的高度是k,沒被抽走的書的高度出現情況壓位(28)表示l,的最小混亂度。