題目鏈結 (牛客網)
「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...