修剪草坪问题有一个n*m的草坪(1
1个回答

假设a[i][j]是需要修剪成的图案的一个点的高度,比如测试样例里面给的矩阵

存在解的条件很简单,任意i,j,存在a[i][j]是第i行或者第j列的最大值

试想一下,如果a[i][j]既不是第i行也不是第j列的最大值,为了剪它必然会破坏i行或者j列.

#include

#define max(a,b) (a>b?a:b)

int maxrow[110], maxcol[110];

int a[110][110];

int main () {

int n , m;

scanf("%d %d", n, m);

for (int i = 0; i < n; ++i) {

for (int j = 0; j < m; ++j) {

scanf("%d", a[i][j]);

maxrow[i] = max(a[i][j],maxrow[i]);

maxcol[j] = max(a[i][j],maxcol[j]);

}

}

bool isok = true;

for (int i = 0; i < n; ++i) {

for (int j = 0; j < m; ++j) {

if (maxrow[i] > a[i][j] maxcol[j] > a[i][j]) {

isok = false;

}

}

}

if (isok) {

printf("YESn");

}

else {

printf("NOn");

}

return 0;

}