通过横向切割或垂直切割来分割岛屿的最低成本

时间:2018-02-18 12:49:47

标签: algorithm data-structures

N * M 矩阵形式的岛分成 1 * 1 矩阵。您可以通过水平切割或垂直切割来分割岛屿。在每种情况下,岛屿分为2件。每个细胞中都有一些硬币。分裂的成本是岛上所有分裂的单元的总和。

问题是以最低成本分割岛屿。

输入格式: 第一行包含2个整数 N M

然后N行跟随每个包含 M 整数。

输出格式:

打印所需的最低费用。

Sample Input:                             Sample Output:
2 2                                       16
2 2
1 3

我正在寻找解决此问题的方法。

2 个答案:

答案 0 :(得分:0)

@zenwraight

算法: -

取n * m硬币矩阵作为输入arr [n] [m] 为行和列创建总和矩阵 - sum_row [n]和sum_col [m] 和total_sum func(arr [n] [m])---->在第一行之后水平切割然后我们得到一个arr [n-1] [m]和arr [1] [m]的矩阵。成本是total_sum 现在将arr [1] [m]垂直地打破每个元素 - sum_row [0] + cost(arr [1] [m-1])并很快直到所有first_row元素成为单位矩阵。 FUNC(ARR [N-1] [M])

答案 1 :(得分:-1)

@zenwraight以上示例输入和输出的说明:

首先,我们用成本8分割矩阵,得到2个矩阵,如(2,2)和(1,3)。

现在我们可以将成本4分成(2,2)到(2)和(2)。

现在我们可以将(1,3)与成本4分成(1)和(3)。