一开始觉得虽然题目很长,但是解题思路是挺清晰的。就是用数组将树的位置设为1.然后用几个循环做数组求和求最大值。可是提交时却一直WA。想了很久才发现代码同时存在几个问题。第一问题是用数组保存树的位置时下表保留错了。坐标(x,y)其实对应的是的数组不是 a(x-1)(y-1),而应该是 a(y-1)(x-1)。第二个问题最外面的循环忘记了每次都要将数组清空。清空数组可以用#include <string.h>里面的memset(a,0,sizeof(a));
最后是AC的代码。
#include<iostream>
#include <string.h>
using namespace std;
int sum_trees(int a[105][105],int i,int j,int s,int t)
{
int sum=0;
for(int p=i;p<i+t;p++)
for(int q=j;q<j+s;q++)
{
sum=sum+a[p][q];
}
return sum;
}
int main()
{
int a[105][105],n,x,y,w,h,s,t,p,q,max,sum;
while(cin>>n&&n!=0)
{
memset(a,0,sizeof(a));
max=0;
cin>>w>>h;
for(int k=0;k<n;k++)
{
cin>>x>>y;
a[y-1][x-1]=1;
}
cin>>s>>t;
for(int i=0;i<=h-t;i++)
{
for(int j=0;j<=w-s;j++)
{
sum=sum_trees(a,i,j,s,t);
if(max<sum)
{
max=sum;
}
}
}
cout<<max<<endl;
}
return 0;
}