http://poj.org/problem?id=2029
给个大矩阵 上面有一些点
再给个小矩阵 问小矩阵最大可以包含多少个点
代码:
#include<iostream> #include<stdio.h> #include<string.h> #include<algorithm> using namespace std; const int N=105; int a[N][N]; int b[N][N];//x范围仅为1 y范围为 h 的和 int sum[N][N];//x范围为w y范围为 h 的和 int main() { int n; int W,H; int w,h; while(scanf("%d",&n)!=EOF,n) { scanf("%d %d",&W,&H); memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(sum,0,sizeof(sum)); while(n--) { int x,y; scanf("%d %d",&x,&y); a[x][y]=1; } scanf("%d %d",&w,&h); for(int i=1;i<=W;++i) { for(int j=1;j<=H;++j) { b[i][j]=a[i][j]+b[i][j-1]; if(j-h>0) b[i][j]-=a[i][j-h]; } } int ans=0; for(int j=1;j<=H;++j) { for(int i=1;i<=W;++i) { sum[i][j]=b[i][j]+sum[i-1][j]; if(i-w>0) sum[i][j]-=b[i-w][j]; ans=max(ans,sum[i][j]); } } printf("%d\n",ans); } return 0; }