题目大意:

https://www.luogu.org/problemnew/show/P1736

题解

dplr[][] 当前点左边(副对角线时为右边)有多少个连续的0

dpup[][] 当前点上边有多少个连续的0

dp[][] 当前点左上有多少个连续的符合要求的1

主对角线时 dp[ i ][ j ]=min(dp[ i-1 ][ j-1 ],min(dplr[ i ][ j-1 ],dpup[ i-1 ][ j ]))+1;

原数组  dplr[][]  dpup[][]  dp[][]

1 0 0   0 1 2   0 1 1   1 0 0

0 1 0   1 0 1   1 0 2   0 2 0

1 0 1   0 1 0   0 1 0   1 0 2

首先 对于一个正方形矩阵来说 其边长上鱼的个数和对角线上鱼的个数是相等的

所以 dp[ i ][ j ]  在 dp[ i-1 ][ j-1 ]、dplr[ i ][ j-1 ]、dp[ i-1 ][ j ] 中取小

相当于查看其 左上的 [i-1][j-1]子矩阵、第i行当前点以左、第j列当前点以上 符合要求的长度

#include <bits/stdc++.h>
using namespace std;
int n,m,a[][],dp[][];
int dplr[][],dpup[][];
int main()
{
while(~scanf("%d%d",&n,&m)) {
int ans=; memset(dp,,sizeof(dp));
memset(dplr,,sizeof(dplr));
memset(dpup,,sizeof(dpup));
for(int i=;i<=n;i++)
for(int j=;j<=m;j++) { /// 主对角线
scanf("%d",&a[i][j]); if(a[i][j])
dp[i][j]=min(dp[i-][j-],min(dplr[i][j-],dpup[i-][j]))+;
else {
dplr[i][j]=dplr[i][j-]+;
dpup[i][j]=dpup[i-][j]+;
} ans=max(ans,dp[i][j]);
} memset(dp,,sizeof(dp));
memset(dplr,,sizeof(dplr));
memset(dpup,,sizeof(dpup));
for(int i=;i<=n;i++)
for(int j=m;j>=;j--) { /// 副对角线
if(a[i][j])
dp[i][j]=min(dp[i-][j+],min(dplr[i][j+],dpup[i-][j]))+;
else {
dplr[i][j]=dplr[i][j+]+;
dpup[i][j]=dpup[i-][j]+;
} ans=max(ans,dp[i][j]);
} printf("%d\n",ans);
} return ;
}

P1736 创意吃鱼法 /// DP的更多相关文章

  1. 洛谷P1736 创意吃鱼法 dp

    正解:dp 解题报告: 早就想写dp的题目辣!我发现我的dp好差啊QAQ所以看到列表的小朋友写dp的题目就跟着他们的步伐做下题好辣QwQ 这题的话没有那——么难,大概说下趴QwQ 首先说下题意 前面一 ...

  2. P1387 最大正方形&&P1736 创意吃鱼法

    P1387 最大正方形 P1736 创意吃鱼法 两道类似的$DP$ 转移方程基本上类似于$f[i][j]=min(f[i-1][j-1],min(f[i][j-1],f[i-1][j]))$ 考虑构成 ...

  3. 洛谷 P1736 创意吃鱼法 Label:dp || 前缀和

    题目描述 回到家中的猫猫把三桶鱼全部转移到了她那长方形大池子中,然后开始思考:到底要以何种方法吃鱼呢(猫猫就是这么可爱,吃鱼也要想好吃法 ^_*).她发现,把大池子视为01矩阵(0表示对应位置无鱼,1 ...

  4. P1736 创意吃鱼法 图的DP

    题目描述 回到家中的猫猫把三桶鱼全部转移到了她那长方形大池子中,然后开始思考:到底要以何种方法吃鱼呢(猫猫就是这么可爱,吃鱼也要想好吃法 ^_*).她发现,把大池子视为01矩阵(0表示对应位置无鱼,1 ...

  5. P1736 创意吃鱼法[二维dp]

    题目背景 感谢@throusea 贡献的两组数据 题目描述 回到家中的猫猫把三桶鱼全部转移到了她那长方形大池子中,然后开始思考:到底要以何种方法吃鱼呢(猫猫就是这么可爱,吃鱼也要想好吃法 ^_*).她 ...

  6. P1387 最大正方形 && P1736 创意吃鱼法(DP)

    题目描述 在一个n*m的只包含0和1的矩阵里找出一个不包含0的最大正方形,输出边长. 输入输出格式 输入格式: 输入文件第一行为两个整数n,m(1<=n,m<=100),接下来n行,每行m ...

  7. 洛谷 P1736 创意吃鱼法(多维DP)

    题目描述 回到家中的猫猫把三桶鱼全部转移到了她那长方形大池子中,然后开始思考:到底要以何种方法吃鱼呢(猫猫就是这么可爱,吃鱼也要想好吃法 ^_*).她发现,把大池子视为01矩阵(0表示对应位置无鱼,1 ...

  8. 洛谷 P1736 创意吃鱼法

    题目描述 题目链接:https://www.luogu.org/problemnew/show/P1736 回到家中的猫猫把三桶鱼全部转移到了她那长方形大池子中,然后开始思考:到底要以何种方法吃鱼呢( ...

  9. P1736 创意吃鱼法

    题目描述 回到家中的猫猫把三桶鱼全部转移到了她那长方形大池子中,然后开始思考:到底要以何种方法吃鱼呢(猫猫就是这么可爱,吃鱼也要想好吃法 ^_*).她发现,把大池子视为01矩阵(0表示对应位置无鱼,1 ...

随机推荐

  1. 使用idea开发分布式项目中优化tomact的方法

    1. idea内存优化 找到idea安装目录,我的是在D:\IDEA\bin目录中 找到idea.exe.vmoptions和idea64.exe.vmoptions文件 这两个文件全部改成如下配置, ...

  2. NX二次开发-UFUN获取边的端点UF_MODL_ask_edge_verts

    NX9+VS2012 #include <uf.h> #include <uf_modl.h> #include <uf_ui.h> #include <uf ...

  3. xcode5 添加Build Phases脚本

    http://www.runscriptbuildphase.com/ 版权声明:本文为博主原创文章,未经博主允许不得转载.

  4. 笔试题-求小于等于N的数中有多少组素勾股数

    题目描述: 一组勾股数满足:a2+b2=c2: 素勾股数:a,b,c彼此互质. 输入正整数N: 输出小于等于N的数中有多少组勾股数. 例: 输入:10 输出:1 思路:我是直接暴力破解的…… 首先找出 ...

  5. Centos7.5安装分布式Hadoop2.6.0+Hbase+Hive(CDH5.14.2离线安装tar包)

    Tags: Hadoop Centos7.5安装分布式Hadoop2.6.0+Hbase+Hive(CDH5.14.2离线安装tar包) Centos7.5安装分布式Hadoop2.6.0+Hbase ...

  6. ADIS16405BMLZ

    GND,VCC,CS,DOUT,SCLK,DIN

  7. 采用多个数据源是Spring的配置

    XML配置多多源文件: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="h ...

  8. 利用Python,方便局域网内上传下载文件

    因为一直在用windows系统,最近需要用到linux的服务器,两个电脑之间总是需要来回拷贝文件 这样使得很繁琐,之前一直在用Python,开启一个简单的服务器,可以在另外一台同一局域网下的电脑,在线 ...

  9. numpy基本函数

    在学习python的时候常常需要numpy这个库,每次都是用一个查一个,这个,终于见到一个完整的总结了http://blog.csdn.net/blog_empire/article/details/ ...

  10. USACO2007 Monthly Expense /// 二分法 oj21658

    题目大意: 共N ( 1 ≤ N ≤ 100,000 )个 工作日 ,分M ( 1 ≤ M ≤ N ) 个 清算月 一个 清算月 包含一个工作日或更多连续的工作日,每一个工作日都仅被包含在一个 清算月 ...