void-man

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

题目给出一个矩形某几个坐标有数,然后给你一个给定的大小的矩形放置到里面,问如何才能让这个矩形里面的树最多...

这题数据比较弱弱才100,所以首先尝试了下暴力,竟然0ms过了,还是再用树状来一遍吧,在这种数据下树状体现不出优势啊,16ms过啊啊

二维树状数组其实就是更新操作时候多了一层而已,套两层循环直接就ok

就是在最后求解的时候需要用到容斥定理,套用一下小媛大牛的图吧

暴力枚举求解:

#include <stdio.h>
#include <string.h>
#define N 105
int map[N][N];
int main()
{
    int n,w,h,sum,result,x,y;
    while(scanf("%d",&n)!=EOF,n)
    {
        result=0;
        memset(map,0,sizeof(map));
        scanf("%d%d",&w,&h);
        for(int i=0;i<n;i++)
        {
            scanf("%d%d",&x,&y);
            map[x][y]=1;
        }
        scanf("%d%d",&x,&y);
        for(int i=1;i<=w-x+1;i++)
         for(int j=1;j<=h-y+1;j++)
         {
             sum=0;
             for(int p=i;p<i+x;p++)
              for(int q=j;q<j+y;q++)
              sum+=map[p][q];
              if(sum>result)
              result=sum;
         }
        printf("%d\n",result);
    }
}
二维树状数组
#include <queue>
#include <stack>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <limits.h>
#include <string.h>
#include <algorithm>
#define MAX 105
int c[MAX][MAX];
int lowbit(int x)
{
    return x&(-x);
}
void update(int x,int y)
{
    for(int i=x;i<MAX;i+=lowbit(i))
     for(int j=y;j<MAX;j+=lowbit(j))
      c[i][j]++;
}
int get(int x,int y)
{
    int sum=0;
    for(int i=x;i>0;i-=lowbit(i))
     for(int j=y;j>0;j-=lowbit(j))
      sum+=c[i][j];
      return sum;
}
int main()
{
    int n,w,h,sum,result,x,y;
    while(scanf("%d",&n)!=EOF,n)
    {
        result=0;
        memset(c,0,sizeof(c));
        scanf("%d%d",&w,&h);
        for(int i=0;i<n;i++)
        {
            scanf("%d%d",&x,&y);
            update(x,y);
        }
        scanf("%d%d",&x,&y);
        for(int i=x;i<=w;i++)
         for(int j=y;j<=h;j++)
         {
             sum=0;
             sum=get(i,j)-get(i-x,j)-get(i,j-y)+get(i-x,j-y);
             if(sum>result)
             result=sum;
         }
         printf("%d\n",result);
    }
}

posted on 2011-08-03 01:00  void-man  阅读(448)  评论(0)    收藏  举报