2000ms
- 131072K
在一张 nnn 行 mmm 列的方格地图上放置一些守卫,每个守卫能守护上、左、右三个方向上相邻的方格和自己所在的方格。如下图,红色的方格放置守卫,绿色的方格为该守卫守护的区域。
现在要求在地图上放置若干个守卫,让每个方格至少被一个守卫守护(可以同时被多个守卫守护),但是有些方格上不能放置守卫(这个方格也需要被守护),求出最少需要多少个守卫才能满足条件。
输入格式
第一行输入两个整数 n,mn,mn,m。
接下来输入一个 n×mn \times mn×m 的矩阵。矩阵中元素为 000 表示该位置不能放置守卫,为 111 表示该位置能放置守卫。元素之间用空格隔开。
数据约定: 所有数据保证一定有一种方案满足条件。
对于 20%20\%20% 的数据:1≤n,m≤51 \le n,m \le 51≤n,m≤5;
对于 50%50\%50% 的数据:1≤n≤20,1≤m≤101 \le n \le 20, 1 \le m \le 101≤n≤20,1≤m≤10;
对于 100%100\%100% 的数据:1≤n∗m≤1000,1≤m≤151 \le n * m \le 1000, 1 \le m \le 151≤n∗m≤1000,1≤m≤15。
输出格式
输出最少需要放置的守卫数量。
样例输入1
3 3 1 0 1 1 1 1 0 1 0
样例输出1
4
样例输入2
3 3 1 1 1 0 1 1 1 1 1
样例输出2
3
样例1 放置如下
样例2 放置如下
-
-
-
会做的朋友们,给我评论吧!