zoukankan      html  css  js  c++  java
  • POJ 2029 Get Many Persimmon Trees(DP||二维树状数组)

    题目链接

    题意 : 给你每个柿子树的位置,给你已知长宽的矩形,让这个矩形包含最多的柿子树。输出数目

    思路 :数据不是很大,暴力一下就行,也可以用二维树状数组来做。

     1 //2029
     2 #include <stdio.h>
     3 #include <string.h>
     4 #include <iostream>
     5 
     6 using namespace std ;
     7 
     8 int mapp[110][110] ;
     9 
    10 int main()
    11 {
    12     int N ,S,T ,W,H;
    13     while(scanf("%d",&N) != EOF && N)
    14     {
    15         int x,y ;
    16         memset(mapp,0,sizeof(mapp)) ;
    17         scanf("%d %d",&W,&H) ;
    18         for(int i = 0 ; i < N ; i++)
    19         {
    20             scanf("%d %d",&x,&y) ;
    21             mapp[x][y] = 1 ;
    22         }
    23         scanf("%d %d",&S,&T) ;
    24         for(int i = 1 ; i <= W ; i++)
    25             for(int j = 1 ; j <= H ; j++)
    26                 mapp[i][j] += (mapp[i-1][j]+mapp[i][j-1]-mapp[i-1][j-1]) ;
    27         int ans = -1 ;
    28         for(int i = S ; i <= W ;i ++)
    29         {
    30             for(int j = T ; j <= H ; j++)
    31             {
    32                 ans = max(ans,mapp[i][j]-mapp[i-S][j]-mapp[i][j-T]+mapp[i-S][j-T]) ;
    33             }
    34         }
    35         printf("%d
    ",ans) ;
    36     }
    37     return 0 ;
    38 }
    View Code

    二维树状数组

     1 #include<iostream>
     2 #include<math.h>
     3 #include<stdio.h>
     4 #include<string.h>
     5 #define MAX 102
     6 using namespace std;
     7 int c[MAX][MAX];
     8 int lowbit(int x)
     9 {
    10     return x & (-x);
    11 }
    12 void add( int x,int y)
    13 {
    14     int i=x,j=y;
    15       for(i=x;i<MAX;i+=lowbit(i))
    16           for(j=y;j<MAX;j+=lowbit(j))
    17               c[i][j]++;
    18 }
    19 int sum(int x,int y)
    20 {
    21    int i,k,sum = 0;
    22     for(i=x; i>0; i-=lowbit(i))
    23         for(k=y; k>0; k-=lowbit(k))
    24             sum += c[i][k];
    25     return sum;
    26 }
    27 int main()
    28 {
    29     int w,h,i,j,s,t,n;
    30     int x,y,ans;
    31     while(scanf("%d",&n))
    32     {
    33         if(n==0)break;
    34         memset(c,0,sizeof(c));
    35         scanf("%d%d",&w,&h);
    36         for(i=0;i<n;i++)
    37         {
    38             scanf("%d%d",&x,&y);
    39             add(x,y);
    40         }
    41         scanf("%d%d",&s,&t);
    42         ans=0;
    43         for(i=s;i<=w;i++)
    44         {
    45             for(j=t;j<=h;j++)
    46             {
    47                 ans=max(ans,sum(i,j)-sum(i-s,j)-sum(i,j-t)+sum(i-s,j-t));
    48             }
    49         }
    50         printf("%d
    ",ans);
    51     }
    52 }
    View Code
  • 相关阅读:
    我的家庭保险方案推荐
    如何修改Total Commander配件文件的位置
    豆瓣统计-2015
    RESTful API接口设计规范
    正则表达式中 的$1,$2与实际应用
    查询排序:order by case when理解、在order By子句中使用case语句的理解
    架构设计:BFF和Serverless简介
    移动端1px细线解决方案总结
    SpringMVC中实体类属性is开头的字段返回JSON时自动去掉is开头的问题
    详解JS面向对象的三大特征之多态
  • 原文地址:https://www.cnblogs.com/luyingfeng/p/3860224.html
Copyright © 2011-2022 走看看