例.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进阶总结的更多相关文章

  1. python 基础篇 11 函数进阶----装饰器

    11. 前⽅⾼能-装饰器初识本节主要内容:1. 函数名的运⽤, 第⼀类对象2. 闭包3. 装饰器初识 一:函数名的运用: 函数名是一个变量,但他是一个特殊变量,加上括号可以执行函数. ⼆. 闭包什么是 ...

  2. NodeJS学习笔记 进阶 (11)Nodejs 进阶:调试日志打印:debug模块

    个人总结:读完这篇文章需要5分钟,讲解了debug模块的使用 摘选自网络 前言 在node程序开发中时,经常需要打印调试日志.用的比较多的是debug模块,比如express框架中就用到了.下文简单举 ...

  3. duilib进阶教程 -- 总结 (17)

    整个教程的代码下载:http://download.csdn.net/detail/qq316293804/6502207 (由于duilib进阶教程主要介绍界面,所以这个教程只给出界面相关的代码,完 ...

  4. 一个js爬虫

    1. 第一个demo 2. configs详解——之成员 3. configs详解——之field 4. configs详解——之site, page和console 5. configs详解——之回 ...

  5. Java+7入门经典 - 6 扩展类与继承 Part 1/2

    第6章 扩展类与继承 面向对象编程的一个重要特性: 允许基于已定义的类创建新的类; 6.1 使用已有的类 派生 derivation, 派生类 derived class, 直接子类 direct s ...

  6. C++ 编程技巧笔记记录(持续更新)

    C++是博大精深的语言,特性复杂得跟北京二环一样,继承乱得跟乱伦似的. 不过它仍然是我最熟悉且必须用在游戏开发上的语言,这篇文章用于挑选出一些个人觉得重要的条款/经验/技巧进行记录总结. 文章最后列出 ...

  7. Android中WebView使用全解

    开始 在Android系统中内嵌的WebKit,这是一个浏览器内核,它帮助着我们可以浏览网页.在实际开发中,如果你想让你的App能够访问网页,那就需要用到WebView这个控件. 如何使用? 其实使用 ...

  8. Spark实战系列目录

    1 Spark rdd -- action函数详解与实战 2 Spark rdd -- transformations函数详解与实战(上) 3 Spark rdd -- transformations ...

  9. 地区sql

    /*Navicat MySQL Data Transfer Source Server : localhostSource Server Version : 50136Source Host : lo ...

  10. [.net 面向对象程序设计进阶] (11) 序列化(Serialization)(三) 通过接口 IXmlSerializable 实现XML序列化 及 通用XML类

    [.net 面向对象程序设计进阶] (11) 序列化(Serialization)(三) 通过接口 IXmlSerializable 实现XML序列化 及 通用XML类 本节导读:本节主要介绍通过序列 ...

随机推荐

  1. Linux mint的hadoop安装方法

    参考网址http://www.powerxing.com/install-hadoop/ 1.创建hadoop账户 这条命令创建了可以登陆的 hadoop 用户,并使用 /bin/bash 作为 sh ...

  2. vscode launch program "xxx" does not exist

    Error Solution Please Click The Build Button Other This maybe is the one of Makefile Tools or 'c++ e ...

  3. 《uTools:提升效率的神奇工具》

    utools5.0 一.引言 在如今快节奏的工作和生活中,我们都在寻找能够帮助我们节省时间.提高效率的工具.uTools 就是这样一款令人惊艳的工具,它为我的日常带来了极大的便利. 相关链接:uToo ...

  4. 奥特曼框架autMan对接微信(千寻、西瓜)框架的详细教程

    教程只写常用的两:西瓜.千寻,都运行在windows平台上. 1.千寻对接 文章底部下载千寻微信框架 解压至win电脑 电脑安装微信3.6.0.18并关闭自动更新 运行千寻微信框架 5.千寻框架设置 ...

  5. Flink - [06] 状态管理

    题记部分 一.Flink中的状态 由一个任务维护,并且用来计算某个结果的所有数据,都属于这个任务的状态. 可以认为状态就是一个本地变量,可以被任务的业务逻辑访问. Flink会进行状态管理,包括状态一 ...

  6. HTTP协议与RESTful API实战手册(终章):构建企业级API的九大秘籍 🔐

    title: HTTP协议与RESTful API实战手册(终章):构建企业级API的九大秘籍 date: 2025/2/28 updated: 2025/2/28 author: cmdragon ...

  7. [解决方案]无法加载文件 C:\Users\Administrator\AppData\Roaming\npm\vue.ps1,因为在此系统中禁止执行脚本

    前言 windows环境,安装vue-cli 脚手架. 安装成功,但是执行 vue -V 报错了. 报错信息:无法加载文件 C:\Users\Administrator\AppData\Roaming ...

  8. 近1000 star,Forest 1.5.0 正式版发布

    简介 Forest是一个高层的.极简的轻量级HTTP调用API框架. 相比于直接使用Httpclient您不再用写一大堆重复的代码了,而是像调用本地方法一样去发送HTTP请求. 不需要调用HTTP底层 ...

  9. The selected directory is not a valid home for Go SDK

    前言 The selected directory is not a valid home for Go SDK 出现这个错误的原因是 idea 的 Go-plugin 插件,和 Go 的sdk版本不 ...

  10. go语言中iota和左移<< 右移<<

    iota 特殊常量 在go语言中iota比较特殊,是一个被编译器修改的常量,在每一个const关键字出现时被重置为0,然后在下一个const出现之前,每出现一次iota,其所代表的数字就会自动加1 p ...