这段时间要沉迷刷题一段时间了,就让CSDN陪我一起吧!
一、题目大意
题目意思也很简单,给定一个H×W的矩阵地图,其中有一些点是柿子树,又给定矩形框的大小为T×S,要求用矩形框可以框到的最多多少个柿子树?
二、题目思路以及AC代码
这道题是明显的水题,一开始我还在琢磨怎么做,后来一看数据量,H、W、T、S都小于100,直接暴力的复杂度也就是O(HWS*T),也够了,所以我就直接暴力了。
这题有好多大佬是先用树状数组,然后再暴力的,因为我就没学那个东西,所以也就先不看了,后面有机会再学,但我考虑也可以使用二维dp来求解,确实会比直接暴力简单一些,但这题就没什么必要了。
下面给出AC代码:
#include <iostream>
#include <algorithm>
#define INF 1000000
#define MAXN 110
using namespace std;
bool map[MAXN][MAXN];
int N;
int W, H;
int S, T;
void init() {
for (int i = 0; i < MAXN; i++) {
for (int j = 0; j < MAXN; j++) {
map[i][j] = false;
}
}
}
int main()
{
while (scanf("%d", &N) != EOF) {
if (!N) break;
init();
scanf("%d%d", &W, &H);
for (int i = 0; i < N; i++) {
int x, y;
scanf("%d%d", &x, &y);
map[y][x] = true;
}
scanf("%d%d", &S, &T);
int m = -INF;
for (int i = 1; i <= H - T + 1; i++) {
for (int j = 1; j <= W - S + 1; j++) {
int tmp = 0;
for (int x = i; x < i + T; x++) {
for (int y = j; y < j + S; y++) {
if (map[x][y]) tmp++;
}
}
m = max(m, tmp);
}
}
printf("%d\n", m);
}
return 0;
}
如果有什么问题,欢迎大家指正!!!