poj2029 2010.4.14
跟分割矩阵的存储方式相同
dp[i][j]:以(1,1)为左上角,以(i,j)为右下角的矩阵柿子树的数目。
#include <cstdio>
#include <cstring>
#define LEN 102
int dp[LEN][LEN];
int w,h;
int s,t;
int n;
void init()
{
int i;
for(i=1;i<=n;i++)
{
int x,y;
scanf("%d %d",&x,&y);
dp[y][x]=1;
}
}
int calit(int x,int y)
{
int xx=x-t,yy=y-s;
int ans=dp[x][y]-dp[xx][y]-dp[x][yy]+dp[xx][yy];
return ans;
}
int max(int x,int y)
{
if (x>y) return x;else return y;
}
int main()
{
int i,j;
while (scanf("%d",&n),n)
{
scanf("%d %d",&w,&h);
memset(dp,0,sizeof(dp));
init();
for(i=1;i<=h;i++)
for(j=1;j<=w;j++)
dp[i][j]+=(dp[i-1][j]-dp[i-1][j-1]+dp[i][j-1]);
int ans=0;
scanf("%d %d",&s,&t);
for(i=t;i<=h;i++)
for(j=s;j<=w;j++)
ans=max(ans,calit(i,j));
printf("%d\n",ans);
}
return 0;
}