poj 2029 Get Many Persimmon Trees 夜

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;
}

  

原文地址:https://www.cnblogs.com/liulangye/p/2598635.html