粉刷匠的難題

2021-10-07 02:48:42 字數 656 閱讀 5844

粉刷匠遇到了乙個難題:有n根柱子排成一條直線,需要給柱子塗上顏色,現在共有k種顏色,每根柱子塗不同顏色的費用不同。並且要求相鄰柱子顏色不同。你能幫他計算最小的支出費用嗎?

費用通過乙個n*k 的矩陣給出,比如cost[0][0]表示柱子0塗顏色0的費用,cost[1][2]表示柱子1塗顏色2的費用。

測試輸入:

3 314 2 11

11 14 5

14 3 10

預期輸出:

10這個題很明顯是從每一行的數中選擇乙個使得加和最小。而且相鄰的行不能選擇同乙個列。可以用dfs遞迴,找到所有的情況,然後從中找到最小的那個結果。

#include

int n,k;

int min =

1e9;

int cost[

100]

[100];

void

dfs(

int x,

int y,

int cnt)

return;}

for(

int i =

0; i< k; i++)}

}int

main()

printf

("%d"

,min)

;}

粉刷匠 集體照

有m個種類的球,第i個種類有r i 個球,把球排成一行是使得相鄰兩個球種類不同,問方案數。我們可以乙個種類乙個種類的放球。兩個球中間以及最前最後都有 空 定義非法空指該空兩端是同色球,合法空反之。設f i,j 表示當前做到種類i,有j個合法空。此時有個sum表示空的總數。我們可以列舉這r i 個球放...

牛客 粉刷匠(dp)

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

NOIP2013模擬 粉刷匠

給出n個球,其中有c1個球是顏色1的,有c2個球是顏色2的,有c3個球是顏色3的 有ck個球是顏色k的。求相鄰兩個球顏色不同的排列方案。k 15,ci 6,資料組數 2000 這種題一般很難有直接的通式,可以考慮dp。設fi,j表示,前i中顏色已經放完了,其中產生了j個不合法的空的方案數。這裡的空指...