// ZOJ:1716
// 本题使用枚举法实现效率可能不高,不过问题比较小时可以采用
// 优点:算法会比较简单
///
#include "stdio.h"
int main(void)
{
int width, heigth; //区域的宽和高
int n; //柿子树的个数
int specwidth, specheigth; //指定区域的宽和高
int area[200][200] = {0}; //用于计算的存储区域
int coordinatex, coordinatey;
int i, j, x, y;
int k, l;
int curnum, maxnum;
while (scanf("%d", &n))
{
if (n == 0)
break;
curnum = 0;
maxnum = 0;
//矩阵清零
for (k = 0; k < 200; k++)
{
for (l = 0; l < 200; l++)
{
area[k][l] = 0;
}
}
scanf("%d %d", &width, &heigth);
//初始化矩阵数据
while (n-- > 0)
{
scanf("%d %d", &coordinatex, &coordinatey);
area[coordinatey - 1][coordinatex - 1] = 1;
}
scanf("%d %d", &specwidth, &specheigth);
//枚举每种情况
for (j = 0; j + specheigth - 1 < heigth; j++)
{
for (i = 0; i + specwidth - 1 < width; i++)
{
for (x = 0; x < specheigth; x++)
{
for (y = 0; y < specwidth; y++)
{
if (area[j + x][i + y] == 1)
{
++curnum;
}
}
}
if (curnum > maxnum)
{
maxnum = curnum;
}
curnum = 0;
}
}
printf("%d/n", maxnum);
}
return 0;
}
zoj 1716 又是一道简单题。直接暴力枚举实现!
最新推荐文章于 2018-12-07 16:29:00 发布