粉刷匠遇到了乙個難題:有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個不合法的空的方案數。這裡的空指...