题目大意:

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. js特效玫瑰花

    <script> var b = document.body; var c = document.getElementsByTagName('canvas')[0]; var a = c. ...

  2. QT 环境变量配置

    //注意每个人的习惯不一样 在系统变量中新建: { QT = C:\Qt\Qt5.13.1\5.13.1 QT_TOOL = C:\Qt\Qt5.13.1\Tools } 然后在path 中加入 { ...

  3. Go const 关键字

    Go const 关键字 package main import "fmt" func main() { const LENGTH int = 10 const WIDTH int ...

  4. NOIp2018集训test-9-15(联考二day1)

    T1.矩阵游戏 水题.每一行最后乘的数为x[i],每一列为y[i],暴力算第一行的列的贡献,每一行的列的贡献是公差为所有列的贡献之和的等差数列,然后每一行再乘上行的贡献求和即为答案. //Achen ...

  5. NX二次开发-NXOPEN_DimensionCollection遍历图纸上的所有标注尺寸

    NX11+VS2013 #include <NXOpen/Drawings_DrawingSheet.hxx> #include <NXOpen/Drawings_DrawingSh ...

  6. NX二次开发-UFUN结合NXOPEN开发_常用代码模板

    hpp //头文件 #include <NXOpen/Part.hxx> #include <NXOpen/PartCollection.hxx> #include <N ...

  7. 简单HOOK SSDT实现文件防删除

    http://www.rosoo.net/a/201001/8347.html

  8. Date转换为LocalDateTime

    一.在Java 8中将Date转换为LocalDateTime 方法1: 将Date转换为LocalDatetime,我们可以使用以下方法: 1.从日期获取ZonedDateTime并使用其方法toL ...

  9. 用mybatis时log4j总是不记录sql语句

    log4j:WARN No appenders could be found for logger (org.apache.ibatis.logging.LogFactory).log4j:WARN ...

  10. 【LGP5439】【XR-2】永恒

    题目 是个傻题 显然枚举每一条路径经过了多少次,如果\(u,v\)在树上不是祖先关系的话经过\((u,v)\)这条路径的路径条数就是\(sum_u\times sum_v\) 于是我们子树大小映射到\ ...