题目描述

农夫约翰想要在他的正方形农场上建造一座正方形大牛棚。他讨厌在他的农场中砍树,想找一个能够让他在空旷无树的地方修建牛棚的地方。我们假定,他的农场划分成 N x N 的方格。输入数据中包括有树的方格的列表。你的任务是计算并输出,在他的农场中,不需要砍树却能够修建的最大正方形牛棚。牛棚的边必须和水平轴或者垂直轴平行。

EXAMPLE

考虑下面的方格,它表示农夫约翰的农场,‘.'表示没有树的方格,‘#'表示有树的方格

1 2 3 4 5 6 7 8

1 . . . . . . . .

2 . # . . . # . .

3 . . . . . . . .

4 . . . . . . . .

5 . . . . . . . .

6 . . # . . . . .

7 . . . . . . . .

8 . . . . . . . .

最大的牛棚是 5 x 5 的,可以建造在方格右下角的两个位置其中一个。

输入输出格式

输入格式:

Line 1: 两个整数: N (1 <= N <= 1000),农场的大小,和 T (1 <= T <= 10,000)有树的方格的数量

Lines 2..T+1: 两个整数(1 <= 整数 <= N), 有树格子的横纵坐标

输出格式:

只由一行组成,约翰的牛棚的最大边长。

输入输出样例

输入样例#1:

8 3
2 2
2 6
6 3

输出样例#1:

5

说明

题目翻译来自NOCOW。

USACO Training Section 5.3

Solution

这个题题意很简单,就是求该区域里最大的不包括树的正方形.
然后应该可以想到是动态规划.但是似乎之前没做过类似的题目,被这道题还卡了10分钟...

状态定义:
\[f[i][j]\]
表示当前到 i,j 这个点最大的正方形的边长.

那么当我们要推广新点的时候,只可能有一下几种情况:

  1. 加 1 排.
  2. 加 1 列.
  3. 加 1 排, 1 列.

然后就可以得到
转移方程:
\[ f[i][j]=min(f[i-1][j-1],min(f[i-1][j],f[i][j-1]))+1;\]
为什么要取 min 应该也很好理解额...

代码

#include<bits/stdc++.h>
using namespace std;
const int maxn=1008;
int n,t,ans;
int c[maxn][maxn];
int f[maxn][maxn];
int main()
{ios::sync_with_stdio(false);cin>>n>>t;for(int i=1;i<=t;i++){int x,y;cin>>x>>y;c[x][y]=1;}for(int i=1;i<=n;i++)for(int j=1;j<=n;j++){if(!c[i][j]){f[i][j]=min(f[i-1][j-1],min(f[i-1][j],f[i][j-1]))+1;ans=max(ans,f[i][j]);}}cout<<ans<<endl;return 0;
}

转载于:https://www.cnblogs.com/Kv-Stalin/p/9160859.html

[USACO5.3]Big Barn (动态规划)相关推荐

  1. luoguP2701 [USACO5.3]巨大的牛棚Big Barn(极大子矩阵)

    题目描述 农夫约翰想要在他的正方形农场上建造一座正方形大牛棚.他讨厌在他的农场中砍树,想找一个能够让他在空旷无树的地方修建牛棚的地方.我们假定,他的农场划分成 N x N 的方格.输入数据中包括有树的 ...

  2. 洛谷 P2701 [USACO5.3]巨大的牛棚Big Barn

    题目背景 (USACO 5.3.4) 题目描述 农夫约翰想要在他的正方形农场上建造一座正方形大牛棚.他讨厌在他的农场中砍树,想找一个能够让他在空旷无树的地方修建牛棚的地方.我们假定,他的农场划分成 N ...

  3. 伍六七带你学算法 动态规划 ——不同路径

    力扣 62. 不同路径 难度 中等 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为"Start" ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格 ...

  4. 由动态规划计算编辑距离引发的思考

    简单介绍 编辑距离算法: https://www.cnblogs.com/BlackStorm/p/5400809.html https://wizardforcel.gitbooks.io/the- ...

  5. LeetCode 10. Regular Expression Matching python特性、动态规划、递归

    前言 本文主要提供三种不同的解法,分别是利用python的特性.动态规划.递归方法解决这个问题 使用python正则属性 import reclass Solution2:# @return a bo ...

  6. 【动态规划】Part1

    1. 硬币找零 题目描述:假设有几种硬币,如1.3.5,并且数量无限.请找出能够组成某个数目的找零所使用最少的硬币数. 分析:   dp [0] = 0            dp [1] = 1 + ...

  7. 2016.4.2 动态规划练习--讲课整理

    1.codevs1742 爬楼梯  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题目描述 Description 小明家外面有一个长长的楼梯,共N阶.小明的腿 ...

  8. 算法设计与分析第4章 动态规划(二)【DP序列问题】

    第3章 动态规划(二)[DP序列问题] 3.2 DP序列问题 (51nod的动态规划教程很不错,讲解很详细,以下分析来自51nod) 1.矩阵取数问题 给定一个m行n列的矩阵,矩阵每个元素是一个正整数 ...

  9. 算法设计与分析第4章 动态规划(一)【背包问题】

    第3章动态规划(一)[背包问题] 基本思想: 动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,但是经分解得到的子问题往往不是互相独立的.不同子问题的数目常常只有多项式量级.在用 ...

最新文章

  1. 用户操作-用户添加流程分析
  2. Linux IO磁盘篇整理小记
  3. php tostring(),【php】“__toString()”方法使用,php__tostring
  4. 牛客题霸 [二叉树的之字形层序遍历] C++题解/答案
  5. pandas python groupby_python – 如何使用pandas groupby汇总多个列?
  6. 使用Memory DC
  7. PyQt4开发环境搭建指导
  8. vsmd5错误怎么办_dnf md5文件错误怎么解决,涨知识了
  9. IIS安装及ASPNet开发环境配置
  10. 软件体系结构复习指南
  11. python实战篇(七)---一寸照换背景
  12. 天猫欲攻手机市场 中华酷联倒戈 京东或将失势
  13. 数学史上10个备受质疑的伟大时刻
  14. 2018(农历年)封山之作,和我一起嚼烂Git(两万字长文)
  15. 切勿妄谈Hadoop,以及4个数据管道打造实践
  16. 骑士CMS模版注入+文件包含getshell复现
  17. Excel表列名称(基本实现)
  18. DrawBoard 是一个自定义 View 实现的画板;方便对图片进行各种编辑或涂鸦相关操作
  19. 阿里云携手开源中国平台发百万悬赏项目
  20. 送5本新出版的《剑指offer》

热门文章

  1. 我的Android学习之路
  2. React Native Keyboard使用详解
  3. 运行 docker gitlab
  4. canvas实现抽奖插件—大转盘和九宫格
  5. 48周岁交的社保,加医疗合计每月1200,想问问退休能开多少?
  6. Curie%20Module有什么用
  7. 写作新手想少走弯路,尽快赚到钱,必须要知道的
  8. 如果你负债累累,上班已经不能还账,又没有创业资金,该怎么办?
  9. 很多朋友问做自媒体的意义是什么?
  10. 中国程序员最应该感谢的几家公司