BIT2014級軟件學院程序設計-05 修剪草坪

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");

	}
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章