小小粉刷匠(區間dp)

2021-09-26 08:06:34 字數 877 閱讀 1198

題目鏈結 (牛客網)

「lalala,我是乙個快樂的粉刷匠」,小名一邊快活地唱著歌,一邊開心地刷著牆",興致突然被打斷,「小名,你今天如果刷不完這一棟樓的牆,那麼你就等著被炒魷魚吧」,老闆聲嘶力竭的吼著。苦惱的小名因為不想被炒魷魚,所以希望盡量快地刷完牆,由於他本人的數學基礎很差,他現在請你來幫助他計算最少完成每一堵牆需要刷多少次。每一面牆有n個段,對於每個段指定乙個目標顏色ci。剛開始的時候所有的牆壁為白色,我們現在有乙個刷子,刷子長度為k,刷子每次可以選擇一種顏色,然後選擇段數為(1~k)連續的牆段刷成選擇的一種顏色。我們現在想要知道,為了把牆變成目標顏色,最少刷多少次(保證指定的目標顏色一定不為白色)。

輸入描述:

對於每乙個案例,我們第一行包括兩個整數n,k(1<=n<=100,1<=k<=50,k輸出描述

輸出乙個數,表示小名最少刷多少次

輸入

3 31 2 1輸出2

輸入5 4

5 4 3 3 4輸出3

陣列a[ i ]記錄輸入的牆面顏色,dp[ i ][ j ]表示在 i — j 中最少需要粉刷的次數,先把 dp[ i ][ i ]都設為 1,然後逐次增加區間長度 len,求解最小值。

#include

#include

using namespace std;

int n,k,dp[

105]

[105

],a[

105]

,j;int

main()

}}cout<[n];

}

牛客 粉刷匠(dp)

有些題目可以進行二維dp,當然這題用四維也可以做。我們先做每一行,f,表示第i個用j次,塗前k個的最大值。做完後,可以把它看作分組揹包問題,每個木板都是乙個物品,再跑一邊dp即可 includeusing namespace std const int n 3e5 10 int f 55 2510 ...

SCU4413 小粉刷匠 組合數學

submit your solution discuss this problem best solutions id main frameborder 0 marginheight 0 marginwidth 0 width 100 height 500 src style height 987p...

HDU6119 小小粉絲度度熊(區間)

區間有n個區間,這n個區間內的天數,都簽到了,m表示m張補簽卡 區間可能存在交叉的情況,求最多連續簽到多少天 include include include include using namespace std typedef long long ll int n,m const int maxn...