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

题目描述

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

在代表池子的01矩阵中,有很多的正方形子矩阵,如果某个正方形子矩阵的某条对角线上都有鱼,且此正方形子矩阵的其他地方无鱼,猫猫就可以从这个正方形子矩阵“对角线的一端”下口,只一吸,就能把对角线上的那一队鲜鱼吸入口中。

猫猫是个贪婪的家伙,所以她想一口吃掉尽量多的鱼。请你帮猫猫计算一下,她一口下去,最多可以吃掉多少条鱼?

输入输出格式

输入格式:

有多组输入数据,每组数据:

第一行有两个整数n和m(n,m≥1),描述池塘规模。接下来的n行,每行有m个数字(非“0”即“1”)。每两个数字之间用空格隔开。

对于30%的数据,有n,m≤100

对于60%的数据,有n,m≤1000

对于100%的数据,有n,m≤2500

输出格式:

只有一个整数——猫猫一口下去可以吃掉的鱼的数量,占一行,行末有回车。

--------------------------------------------我是分割线------------------------------------------------

这题我用的是N2logN的二分,还挺好写的,效率也很可观。

进入正题:

首先要对角线要分成两种,一种是/这样的,一种是\这样的(灵魂题解~~),这是两个相似的问题,我们可以先解决一个,然后把代码复制一下(嘿嘿嘿)。

我们来看一下\这样的对角线,式子很明显:

f[i][j]表示以(i,j)为终点的对角线长度,因此这里一定有要鱼

如果矩阵(i-x,j-x,i,j)是满足题目要求的,那么f[i][j]=max(f[i][j],x)。

同时我们发现,1.x越大越好。2.x的上界是f[i-1][j-1],因为超过这个一定不满足要求。3.如果x不满足要求,那么x到其上界就都不满足。

似乎满足单调性?

那么我们可以二分x。

之后我们再来看满足题目要求的矩阵

举个例子:

1 0 0 0

0 1 0 1

0 0 1 0

0 0 0 1

当i=4,j=4时,由于我们之前算出来f[3][3]是三,那么矩阵(1,1,3,3)一定是符合要求的,所以我们只需要判断第i行1到j个元素与第j行1到i个元素有没有鱼就可以了。

但如果暴力算的话会T,我们可以算矩阵(i-x,j-x,i,j)的和是不是x+1。于是就可以用到我们的二维前缀和了。

贴一下代码:

 

#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int f[2501][2501],s[2501][2501],i;
int a[2501][2501],n,m,l,r,mid,ans,j;
inline int read(){int x=0,p=1; char ch=getchar();while (ch<'0'||ch>'9') {if (ch == '-') p=-1; ch=getchar();}while (ch>='0'&&ch<='9') {x=(x<<1)+(x<<3)+ch-'0'; ch=getchar();}return x*p;
}
int main(){n=read(); m=read();for (i=1; i<=n; i++)for (j=1; j<=m; j++){a[i][j]=read();s[i][j]=s[i-1][j]+s[i][j-1]-s[i-1][j-1]+a[i][j];}for (i=1; i<=n; i++)for (j=1; j<=m; j++){if (a[i][j]){f[i][j]=1;if (f[i-1][j-1]){l=0; r=f[i-1][j-1];while (l<=r){mid=l+r>>1;if (s[i][j]-s[i-mid-1][j]-s[i][j-mid-1]+s[i-mid-1][j-mid-1]==mid+1)l=mid+1;else r=mid-1;}f[i][j]=max(f[i][j],l);}}ans=max(ans,f[i][j]);}memset(f,0,sizeof(f));for (i=1; i<=n; i++)for (j=m; j>=1; j--){if (a[i][j]){f[i][j]=1;l=0; r=f[i-1][j+1];while (l<=r){mid=l+r>>1;if (s[i][j+mid]-s[i][j-1]-s[i-mid-1][j+mid]+s[i-mid-1][j-1]==mid+1)l=mid+1;else r=mid-1;}f[i][j]=max(f[i][j],l);}ans=max(ans,f[i][j]);}printf("%d",ans);return 0;
}

 

转载于:https://www.cnblogs.com/taduro/p/9466107.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/279631.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机组装和维护_如何构建自己的计算机,第二部分:组装在一起

计算机组装和维护So you’ve selected your parts, double- and triple-checked their compatibility, and waited for economy shipping to bring them all to your door. It’s time to get to the fun part: putting them all together. 因此&#xff0c;您已经选择了零件&a…

Python学习-集合的常见用法

st [1,2,3,4,5] ct [2,3,4,5,76] list set(["name", list, try]) list2 set(["name", list, try, but, test]) # 两个列表去重&#xff0c;利用集合st set(st) #设为集合 ct set(ct) print(st, type(st))sct0 st.union(ct) #并集 sct st | ct …

Autofac之自动装配

从容器中的可用服务中选择一个构造函数来创造对象&#xff0c;这个过程叫做自动装配。这个过程是通过反射实现的 默认 思考这么一个问题,如果注册类型中存在多个构造函数,那么Autofac会选择哪一个来创建类型的实例 答案是"尽可能最多参数" class ConstructorClass {p…

对Emlog 6.0 Beta的完整代码审计过程

Emlog 6.0 beta版本&#xff0c;这可能是最后一篇关于PHP语言CMS的代码审计文章&#xff0c;此次将详细记录完整的审计过程。 文章基本上完整记录小东的对此CMS审计过程&#xff0c;或许显得繁琐&#xff0c;但代码审计的过程就是这样&#xff0c;发现可能项&#xff0c;然后精…

SINOCES 2011

突然发现又好久没写过日志了 是在是太懒了… 难得休假去看了眼消费电子 感觉实在是一年不如一年 佳能、索尼不见踪影&#xff0c;相机满场没见一家&#xff08;大牌子是真没见到&#xff09; 华硕技嘉微星等主板厂商同样失踪… PC方面&#xff0c;联想貌似是来卖电脑包鼠标的&a…

esim卡与ms卡的区别_什么是eSIM,它与SIM卡有何不同?

esim卡与ms卡的区别With the launch of the Apple Watch 3, the term “eSIM” has been thrown around a lot. And now, Google’s Pixel 2 is the first phone to use this new technology, it’s time we take a closer look at what it is, what it does, and what this me…

机器学习实战之logistic回归分类

利用logistic回归进行分类的主要思想&#xff1a;根据现有数据对分类边界建立回归公式&#xff0c;并以此进行分类。 logistic优缺点&#xff1a; 优点&#xff1a;计算代价不高&#xff0c;易于理解和实现。缺点&#xff1a;容易欠拟合&#xff0c;分类精度可能不高。 .适用数…

HDU 6343.Problem L. Graph Theory Homework-数学 (2018 Multi-University Training Contest 4 1012)

6343.Problem L. Graph Theory Homework 官方题解: 一篇写的很好的博客: HDU 6343 - Problem L. Graph Theory Homework - [(伪装成图论题的)简单数学题] 代码: 1 //1012-6343-数学2 #include<iostream>3 #include<cstdio>4 #include<cstring>5 #include<…

Android GridView LruCache

照片墙这种功能现在应该算是挺常见了&#xff0c;在很多应用中你都可以经常看到照片墙的身影。它的设计思路其实也非常简单&#xff0c;用一个GridView控件当作“墙”&#xff0c;然后随着GridView的滚动将一张张照片贴在“墙”上&#xff0c;这些照片可以是手机本地中存储的&a…

如何在Android TV上自定义推荐行

When you fire up Android TV, the first thing you see is a list of movies and shows the system thinks you’ll like. It’s often full of the latest flicks or hottest news, but sometimes it could just be things relevant to your interests and the apps you have…

递归 段错误 习题

段错误 递归里面算阶乘 f(10000000)没有输出&#xff0c;使用gdb 显示 SIGSEGV--段错误编译后产生的可执行文件里面保存着什么&#xff1f;UNIX/Linux 用 ELFDOS下用COFFWindows用PE&#xff08;COFF扩充而得&#xff09;段&#xff08;segmentation&#xff09;二进制文件内的…

你知道你常用的dos和linux命令吗?

功能 Linux MS-DOS 进入到该目录 cd cd 列举文件 ls dir 创建目录 mkdir mkdir 清除屏幕 clear cls 复制文件 cp copy 移动文件 mv move 删除文件 rm del 查看文件 less more 文件重命名 mv ren 比较文件内容 diff fc 查看当前路径 pwd chd…

steam串流到手机_如何从手机将Steam游戏下载到PC

steam串流到手机Steam allows you to remotely install games from your smartphone, just like you can with a PlayStation 4 or Xbox One. You can download games to your gaming PC from anywhere, ensuring those big downloads are complete and the game is ready to p…

编写安装配置ftp-samba服务脚本

本脚本实例的要求如下&#xff1a; 1、公司有公共共享目录public,所有员工均可读写&#xff0c;但不允许删除其他员工的文件;不能匿名登录 2、每部门均有共享目录&#xff0c;部门经理可读写&#xff0c;部门员工可读&#xff1b; 非本部门员工不能访问&#xff08;caiwu、rens…

利用java实现excel转pdf文件

在有些需求当中我们需要抓取字段并且填充到excel表格里面&#xff0c;最后将excel表格转换成pdf格式进行输出&#xff0c;我第一次接触这个需求时&#xff0c;碰到几个比较棘手的问题&#xff0c;现在一一列出并且提供解决方案。 1&#xff1a;excel转pdf出现乱码&#xff1a; …

Jmeter HTTP请求后响应数据显示乱码解决方法

Jmeter请求后结果树里无论是text还是html响应数据显示乱码&#xff0c;这是因为jmeter 编码格式配置文件默认不开启导致的&#xff0c;解决方法如下&#xff1a; 1&#xff09;进入jmeter-***\bin目录下&#xff0c;找到jmeter.properties文件&#xff0c;以文本文件形式打开 2…

禁用windows10更新_如何在Windows 10中禁用投影

禁用windows10更新The drop shadows on applications in the Windows 10 preview are really big and suspiciously similar to the ones in OS X, and if they aren’t your speed, you can easily remove them. We actually think they look good, but since somebody out th…

如何访问 Service?- 每天5分钟玩转 Docker 容器技术(99)

前面我们已经学习了如何部署 service&#xff0c;也验证了 swarm 的 failover 特性。不过截止到现在&#xff0c;有一个重要问题还没有涉及&#xff1a;如何访问 service&#xff1f;这就是本节要讨论的问题。 为了便于分析&#xff0c;我们重新部署 web_server。 ① docker se…

sqlyog下载

sqlyog下载&#xff08;附注册码&#xff09;&#xff1a;http://www.onlinedown.net/soft/24926.htm转载于:https://www.cnblogs.com/shujuxiong/p/9474496.html

Linux配置手册(二)配置DHCP服务器

1.检查是否安装DHCP服务器软件 2.挂在RHEL5系统光盘 3.安装DHCP服务软件 4.将模板配置文件复制并覆盖现在的配置文件 5.配置修改dhcpd.conf文件 配置信息 默认租约时间 default-lease-time 最大租约时间 max-lease-time 局域网内所有主机的域名 option domain-name 客户机所使用…