【題目描述】
The cost of painting each house with a certain color is represented by a?n?x?k?cost matrix. For example,?costs[0][0]?is the cost of painting house?0?with color?0;?costs[1][2]?is the cost of painting house?1?with color?2, and so on... Find the minimum cost to paint all houses.
?Notice
All costs are positive integers.
這里有n個房子在一列直線上,現在我們需要給房屋染色,共有k種顏色。每個房屋染不同的顏色費用也不同,你需要設計一種染色方案使得相鄰的房屋顏色不同,并且費用最小。
費用通過一個nxk?的矩陣給出,比如cost[0][0]表示房屋0染顏色0的費用,cost[1][2]表示房屋1染顏色2的費用。
?注意事項
所有費用都是正整數
【題目鏈接】
www.lintcode.com/en/problem/paint-house-ii/
【題目解析】
只記錄3個值,即前一行最小值,第二小值,和最小值的index。
更新當前行元素,當前行元素記錄的是當前行房子涂該種顏色時的最小值,只可能由該元素與上一行的最小值或次小值加和得到。遍歷當前行的每個元素,若該元素的列和前一行最小值index不同,則更新為當前行元素值+上一行最小值,若和上一行最小值index相同,則更新為當前元素值+上一行次小值。同時將該值和當前行的最小值和次小值比較,更新當前行的最小值,次小值和最小值的index。
重復2直到遍歷所有行。
【參考答案】