11.23DP进阶总结
例.1 Luogu-P1387最大正方形
按如下复杂度来分析
- O(\(n^6\))
- O(\(n^5\))
- O(\(n^3\))
- O(\(n^2\log n\))
- O(n^2)
O(\(n^6\))
最朴素的暴力做法
即使用两重循环枚举左上角端点,再使用两重循环枚举右下角端点,在用两重循环遍历区间内的每一个点,统计个数
有一道题是Luogu-B3724,刚好就是使用六重循环解决,主要代码如下
O(n^5)
由于需要寻找的部分是一个正方形,所以可以不用枚举右下角端点,改用枚举边长,计算右下角位置
即右下角位置横坐标是左上角横坐标+边长-1,纵坐标一样计算
注意:由于右下角可能超出正方形边界,所以当超边界时要直接break,因为再往后会越超越大
O(n^3)
发现一个一个统计太耗费时间了,所以使用二维前缀和优化,注意边界
O(\(n^2\log n\))
在N^5是发现了一个长度的单调性:
如果长度短的不行,那么长的肯定不行
如果长的可以,那么一定还有更短的
所以二分长度
O(\(n^2\))
考虑DP
①定义状态:dp[i][j]:表示以(i,j)作为右下角的最长正方形边长
②答案:max(dp[i][j])
③状态转移方程
首先,(i,j)作为右下角,自己就要是1
对于每个(i,j),从(i-1,j-1)直接扩散到(i,j)是不行的,因为还需要(i,j)上面的1数量与(i-i,j-1)相同,左边同理
左边与上面连续1的个数实际上就是上一个格子与左边一个格子的DP值
但是要找三个DP值共有的部分,所以取最小值
得出:
\(dp[i][j]=\min(\min(dp[i-1][j],dp[i][j-1]),dp[i-1][j-1)+1\)
④边界
dp[i]][j]=a[i][j]
P5732 【深基5.习7】杨辉三角
还是DP分析
①状态
dp[i][j]:杨辉三角第i行第j列的数
②答案
dp[i][j]
③方程
每个DP值就是他上面的与它左上方的DP和
dp[i][j]=dp[i-1][j-1]+dp[i-1][j]
④边界
每行第一个和最后一个是1
dp[i][1]=dp[i][i]=1;
练1 P1130 红牌
实际上可以将任务看作纵,将小组看作横
每次可以向右边,即不换小组或右下,即换小组
发现实际上是Luogu 数字三角形 的改版,只不过有多个起点
定义状态
dp[i][j]:让第i个小组去做第j个步骤,前j个步骤所需的时间最小值
答案
max{dp[i][n]}
方程
对于每一个步骤,可以让上一个小组做上一步或这个小组做上一步
即dp[i][j]=min(dp[i-1][j-1],dp[i][j-1])+a[i][j]
a[i][j]表示第i个小组做第j个步骤所需的时间
边界
每个小组做第一步的时间
dp[i][1]=a[i][1]
11.23DP进阶总结的更多相关文章
- python 基础篇 11 函数进阶----装饰器
11. 前⽅⾼能-装饰器初识本节主要内容:1. 函数名的运⽤, 第⼀类对象2. 闭包3. 装饰器初识 一:函数名的运用: 函数名是一个变量,但他是一个特殊变量,加上括号可以执行函数. ⼆. 闭包什么是 ...
- NodeJS学习笔记 进阶 (11)Nodejs 进阶:调试日志打印:debug模块
个人总结:读完这篇文章需要5分钟,讲解了debug模块的使用 摘选自网络 前言 在node程序开发中时,经常需要打印调试日志.用的比较多的是debug模块,比如express框架中就用到了.下文简单举 ...
- duilib进阶教程 -- 总结 (17)
整个教程的代码下载:http://download.csdn.net/detail/qq316293804/6502207 (由于duilib进阶教程主要介绍界面,所以这个教程只给出界面相关的代码,完 ...
- 一个js爬虫
1. 第一个demo 2. configs详解——之成员 3. configs详解——之field 4. configs详解——之site, page和console 5. configs详解——之回 ...
- Java+7入门经典 - 6 扩展类与继承 Part 1/2
第6章 扩展类与继承 面向对象编程的一个重要特性: 允许基于已定义的类创建新的类; 6.1 使用已有的类 派生 derivation, 派生类 derived class, 直接子类 direct s ...
- C++ 编程技巧笔记记录(持续更新)
C++是博大精深的语言,特性复杂得跟北京二环一样,继承乱得跟乱伦似的. 不过它仍然是我最熟悉且必须用在游戏开发上的语言,这篇文章用于挑选出一些个人觉得重要的条款/经验/技巧进行记录总结. 文章最后列出 ...
- Android中WebView使用全解
开始 在Android系统中内嵌的WebKit,这是一个浏览器内核,它帮助着我们可以浏览网页.在实际开发中,如果你想让你的App能够访问网页,那就需要用到WebView这个控件. 如何使用? 其实使用 ...
- Spark实战系列目录
1 Spark rdd -- action函数详解与实战 2 Spark rdd -- transformations函数详解与实战(上) 3 Spark rdd -- transformations ...
- 地区sql
/*Navicat MySQL Data Transfer Source Server : localhostSource Server Version : 50136Source Host : lo ...
- [.net 面向对象程序设计进阶] (11) 序列化(Serialization)(三) 通过接口 IXmlSerializable 实现XML序列化 及 通用XML类
[.net 面向对象程序设计进阶] (11) 序列化(Serialization)(三) 通过接口 IXmlSerializable 实现XML序列化 及 通用XML类 本节导读:本节主要介绍通过序列 ...
随机推荐
- 独立开发经验谈:如何借助 AI 辅助产品 UI 设计
我在业余时间开发了一款自己的独立产品:升讯威在线客服与营销系统.陆陆续续开发了几年,从一开始的偶有用户尝试,到如今线上环境和私有化部署均有了越来越多的稳定用户,在这个过程中,我也积累了不少如何开发运营 ...
- 多云时代!天翼云TeleDB以科技创新释放数据价值
8月17日,在第14届中国数据库技术大会(DTCC2023)上,天翼云科技有限公司数据库首席技术官李跃森以<天翼云TeleDB持续创新之路>为题发表演讲,介绍了天翼云TeleDB数据库的发 ...
- 为 Typecho 添加 B 站蛆音娘表情
首先为什么帮助文档写的很清楚了我还要发,我只是让你们少走弯路一次弄好,后面我会说到 #1. 准备并上传表情文件 首先,你需要在文章底部下载表情文件,对于表情文件,有如下要求和建议: 所有后缀名必须相同 ...
- Zookeeper - [04] 分布式安装部署
一.集群规划 序号 主机名 JDK Zookeeper 1 node01 ○ ○ 2 node02 ○ ○ 3 node03 ○ ○ 二.安装部署 1.将zookeeper安装包解压到合适的目录,如/ ...
- 基于Potplayer类播放器或Action!类录屏软件调取摄像头方式的定时抓拍保存图像方法小结
前面已经总结了基于Maxmspjitter的相关方法,还有基于Unity的,还有基于Openframeworks的,今天来一篇基于普通软件的: 1.专业播放器类的软件,如Potplayer.vlc.o ...
- Codeforces Round 1006 (Div. 3) 补题+题解
A. New World, New Me, New Array 贪心的想每次都赋值一个 \(p\) 如果正好和为 \(k\) 则答案就是 \(k/p\) ,否则是 \(k/p+1\). #includ ...
- csharp入门经典
C#简介 .NET Framework是Microsoft为开发应用程序而创建的一个具有革命意义的平台,它有运行在其他操作系统上的版本 .NET Framework的设计方式确保它可以用于各种语言,包 ...
- 【日常运维笔记】linux系统使用grep命令查找文件,并用vim编辑文件
问题描述:linux系统中查找含有某个字符的文件,进行编辑修改 1.使用grep命令查找到符合条件的文件 命令格式:grep '匹配内容' 文件路径 显示方式(-r -n) -i:忽略大小写进 ...
- python 二级 标准库
1.turtle 函数 包括窗体函数.画笔状态.画笔运动函数 random库 3.time 时间处理.时间格式化.时间计时
- Swagger-交互式API文档
1. Swagger简介 前后端分离 前端 -> 前端控制层.视图层 后端 -> 后端控制层.服务层.数据访问层 前后端通过API进行交互 前后端相对独立且松耦合 产生的问题 前后端集成, ...