6111: 粉刷房子 III
[Creator : ]
Description
在一个小城市里,有 $m\ (1 \leq m \leq 100)$ 个房子排成一排,你需要给每个房子涂上 $n\ (1 \leq n \leq 20)$ 种颜色之一(颜色编号为 $1$ 到 $n$)。有的房子去年夏天已经涂过颜色了,所以这些房子不可以被重新涂色。
我们将连续相同颜色尽可能多的房子称为一个街区。(比方说 houses = [1,2,2,3,3,2,1,1] ,它包含 5 个街区 [{1}, {2,2}, {3,3}, {2}, {1,1}] 。)
给你一个数组 houses ,一个 $m * n$ 的矩阵 cost 和一个整数 target $(1 \leq \text{target} \leq m)$,其中:
houses[i]:是第 $i$ 个房子的颜色,$0$ 表示这个房子还没有被涂色。
cost[i][j]:是将第 $i$ 个房子涂成颜色 $j+1$ 的花费。
请你返回房子涂色方案的最小总花费,使得每个房子都被涂色后,恰好组成 target 个街区。如果没有可用的涂色方案,请返回 $-1$。
我们将连续相同颜色尽可能多的房子称为一个街区。(比方说 houses = [1,2,2,3,3,2,1,1] ,它包含 5 个街区 [{1}, {2,2}, {3,3}, {2}, {1,1}] 。)
给你一个数组 houses ,一个 $m * n$ 的矩阵 cost 和一个整数 target $(1 \leq \text{target} \leq m)$,其中:
houses[i]:是第 $i$ 个房子的颜色,$0$ 表示这个房子还没有被涂色。
cost[i][j]:是将第 $i$ 个房子涂成颜色 $j+1$ 的花费。
请你返回房子涂色方案的最小总花费,使得每个房子都被涂色后,恰好组成 target 个街区。如果没有可用的涂色方案,请返回 $-1$。
Input
第一行包含三个整数 $m,\ n,\ \text{target}$。
第二行包括 $m$ 个整数,第 $i$ 个整数表示 house[i]。
第 $3 \sim m+3$ 行,每行 $n$ 个整数。表示对应的 cost[i][j],$(1 \leq \text{cost[i][j]} \leq 10^4)$。
第二行包括 $m$ 个整数,第 $i$ 个整数表示 house[i]。
第 $3 \sim m+3$ 行,每行 $n$ 个整数。表示对应的 cost[i][j],$(1 \leq \text{cost[i][j]} \leq 10^4)$。
Output
一行一个整数,表示答案。
Sample 1 Input
5 2 3
0 0 0 0 0
1 10
10 1
10 1
1 10
5 1
Sample 1 Output
9
房子涂色方案为 [1,2,2,1,1]
此方案包含 target = 3 个街区,分别是 [{1}, {2,2}, {1,1}]。
涂色的总花费为 (1 + 1 + 1 + 1 + 5) = 9。
此方案包含 target = 3 个街区,分别是 [{1}, {2,2}, {1,1}]。
涂色的总花费为 (1 + 1 + 1 + 1 + 5) = 9。
Sample 2 Input
5 2 3
0 2 1 2 0
1 10
10 1
10 1
1 10
5 1
Sample 2 Output
11
有的房子已经被涂色了,在此基础上涂色方案为 [2,2,1,2,2]
此方案包含 target = 3 个街区,分别是 [{2,2}, {1}, {2,2}]。
给第一个和最后一个房子涂色的花费为 (10 + 1) = 11。
此方案包含 target = 3 个街区,分别是 [{2,2}, {1}, {2,2}]。
给第一个和最后一个房子涂色的花费为 (10 + 1) = 11。
Sample 3 Input
4 3 3
3 1 2 3
1 1 1
1 1 1
1 1 1
1 1 1
Sample 3 Output
-1
房子已经被涂色并组成了 4 个街区,分别是 [{3},{1},{2},{3}] ,无法形成 target = 3 个街区。
HINT
题目来源:LeetCode 1473。