Description
有一個n*m的草坪(1<=n,m<=100),草坪中的草原來的高度都是100。現在使用割草機修剪草坪,來得到各種各樣的圖案。割草機只 能橫着或者豎着割草。每次割草都會先設定一個高度,割完之後會把比設定高度高的草都割成設定的高度。比如草原來是5 2 8,設定高度爲4,那麼割完之後就變成了4 2 4。
現在給出一個圖案,問是否可以把草坪割成圖案的樣子。
Input
輸入第一行包含兩個整數n和m。
接下來爲n行輸入,每行包含m個不大於100的正整數。
Output
如果可以修剪成輸入的圖案,則輸出“YES”,否則輸出“NO”。
Sample input
3 3
2 1 2
1 1 1
2 1 2
Samput Output
YES
水題,每個數必須是行最小或者列最小。
#include<stdio.h>
#include<string.h>
#define maxn 20
int map[maxn][maxn];
int max[10010];
int main()
{
int n, m, i, j;
while (scanf("%d%d", &n, &m) != EOF)
{
memset(map, 0, sizeof(map));
memset(max, 0, sizeof(max));
for (i = 1;i <= n;i++)
{
for (j = 1;j <= m;j++)
{
scanf("%d", &map[i][j]);
}
}
for (i = 1;i <= n;i++)
{
for (j = 1;j <= m;j++)
{
if (map[i][j] > max[i])
{
max[i] = map[i][j];
}
}
}
for (j = 1;j <= m;j++)
{
for (i = 1;i <= n;i++)
{
if (map[i][j] > max[n + j])
max[n + j] = map[i][j];
}
}
int flag = 0;
for (i = 1;i <= n;i++)
{
for (j = 1;j <= m;j++)
{
if (max[i] != map[i][j] && max[n + j] != map[i][j])
flag = 1;
}
}
if (flag)
printf("NO\n");
else printf("YES\n");
}
}