zoukankan      html  css  js  c++  java
  • poj 2029 Get Many Persimmon Trees (dp)

    题目链接

    又是一道完全自己想出来的dp题。

    题意:一个w*h的图中,有n个点,给一个s*t的圈,求这个圈能 圈的最多的点

    分析:d[i][j]代表i行j列 到第一行第一列的这个方框内有多少个点, 然后枚举圈的右下角的点,

    计算在圈的范围的点的方法为 

    d[i][j]-d[i][j-s]-d[i-t][j]+d[i-t][j-s]。
     1 #include <iostream>
     2 #include <cstring>
     3 #include <cstdio>
     4 #include <algorithm>
     5 #define LL long long
     6 using namespace std;
     7 const int maxn = 500 + 10;
     8 int d[110][110], G[110][110];
     9 int n, w, h, s, t;
    10 
    11 int main()
    12 {
    13     int i, j, x, y, sum, ans;
    14     while(~scanf("%d", &n) && n)
    15     {
    16        ans = 0;
    17        memset(d, 0, sizeof(d));
    18        memset(G, 0, sizeof(G));
    19        scanf("%d%d", &w, &h);
    20        for(i = 1; i <= n; i++)
    21        {
    22            scanf("%d%d", &x, &y);
    23            G[y][x] = 1;
    24        }
    25        scanf("%d%d", &s, &t);
    26        for(i = 1; i <= h; i++)
    27        {
    28            sum = 0;
    29            for(j = 1; j <= w; j++)
    30            {
    31                if(G[i][j] == 1)
    32                sum++;
    33                d[i][j] = d[i-1][j] + sum;
    34            }
    35        }
    36        for(i = t; i <= h; i++)
    37        for(j = s; j <= w; j++)
    38        {
    39            ans = max(ans, d[i][j]-d[i][j-s]-d[i-t][j]+d[i-t][j-s]);
    40        }
    41        printf("%d
    ", ans);
    42     }
    43     return 0;
    44 }
  • 相关阅读:
    Android的startActivityForResult()与onActivityResult()与setResult()参数分析,activity带参数的返回
    git stash 保存当前工作状态
    vim diff 的使用
    git pull 命令
    java 开发环境安装
    vim 处理换行符
    git 操作分支
    git 操作远程仓库地址
    vim 宏的使用
    Chrome 调试技巧
  • 原文地址:https://www.cnblogs.com/bfshm/p/3804069.html
Copyright © 2011-2022 走看看