前言

这个笔记记晚了,主要是都在跟 \(LCT\) 进行殊死搏斗,所以博客这方面就挂了很久。

tongyf 学长当年是拿到省一之后省选炸了,之后暴切高考。ORZ%%%

这节课讲的是线性dp和背包dp,也属于对牛弹琴了,,,比 thecold 学长讲的还离谱。那些初中生连dp是什么都不知道,上来就20min搞了4个绿题,更是一节课给他们讲了足足9绿8蓝1紫。我认为最经典的是这句话:

“你们应该会数据结构优化dp,单调队列优化dp,斜率优化这些比较常见的优化dp方式吧,这里我给你们讲一下二进制拆分”

正文

在这里就说一说比较经典的题吧

P1541 [NOIP2010 提高组] 乌龟棋

决策和当前每种牌打出了几张有关,所以状态内要记录每种牌打出了几张。不需要记录当前走了几格,因为走的格数可以由牌的打出情况推出来,而且保证牌全用完就刚好走到终点。

于是设 \(f(a,b,c,d)\) 为第 \(1/2/3/4\) 种牌打出了几张,转移就分类讨论打出了哪种牌。

以打出第一种牌为例,转移方程为:

\(f(a,b,c,d)=f(a-1,b,c,d)+\) 第 \((a+2b+3c+4d)\) 格的分数

可以类比得出打出另外三种牌的转移方程

我当时是用记忆化切掉的,后来听学长讲完恍然大悟////

P2889 [USACO07NOV]Milking Time S

这道题 Bow 的评价是——这个初中生应该可以随便切,水蓝

设 \(f(i)\) 为前 \(i\) 小时最多挤出的牛奶

转移就枚举第 \(i\) 小时结束的挤奶过程,注意要从挤奶过程开始时间减去休息时间转移过来,或者直接不挤奶,则有:

\[f(i)=max{f(i-1),f(begin-r)+Eff}
\]

时间复杂度 \(O(n^2)\)

P4158 [SCOI2009]粉刷匠

设 \(f(i,j,k,0/1/2)\) 为当前为第 \(i\) 行第 \(j\) 列,已经涂色 \(k\) 次,当前格子未涂色/涂色正确/涂色错误的最大正确涂色格数

转移的话考虑前一个格子的颜色以及前一个格子是否填涂即可

如果当前格子涂色,前一个格子也涂色则k不增加,否则需要加一

详细的转移方程比较复杂,不过比较容易想,可以滚动数组优化掉第一维

这个方法好啊!!然后我是用 O(nm^2t) 的偏暴力的方法加 register,inline 小小优化一下卡过去了。。。。。。

P5664 [CSP-S2019] Emiya 家今天的饭

先考虑没有第三个限制的情况,即设 \(g(i,j)\) 为前 \(i\) 行选了 \(j\) 个的方案数,考虑第 \(i\) 行选不选,则有转移方程

\[g(i,j)=g(i-1,j)+g(i-1,j-1)×s_i
\]

\(s_i\) 为第 \(i\) 行 \(a\) 的和,

这一步时间复杂度是 \(O(n^2)\) 的

然后考虑每一列不大于一半的限制,为了容易处理,我们可以进行简单容斥转化为不考虑第三个限制的方案数-某一列大于一半的方案数(思路和上一题很像)

然后显然最多有一列大于一半,于是在计算非法方案的时候枚举第几列非法,这里设第 \(x\) 列非法,设 \(f(i,j,k)\) 为前 \(i\) 行,第 \(x\) 列选了 \(j\) 个,其他列选了 \(k\) 个的方案数,因为对于第 \(x\) 列之外的列我们只需要考虑选了多少个,不需要考虑具体分布在哪一列

CF9D How many trees?

容易想到设 \(f(i,j)\) 为 \(i\) 个点的二叉树高度大于等于 \(j\) 的有几个,但是难以转移,不妨设 \(f(i,j\) )为 \(i\) 个点的二叉树高度不大于 \(j\) 的有几个

转移的时候考虑在第 \(i\) 个点接上左右子树,显然两个子树高度都不大于 \(j-1\),然后枚举左子树的点数,对于左子树有 \(k\) 个点的情况根据乘法原理,总方案数就是

\[f(k,j-1)×f(i-k-1,j-1)
\]

所以有:

\[f(i,j)=∑ f(k,j-1)×f(i-k-1,j-1),f(i,0)=0,f(0,i)=1
\]

答案就是 \(f(n,n)-f(n,h-1)\)

SP283 NAPTIME - Naptime

先考虑时间不连续的情况,则设 \(f(i,j,0/1)\) 为前 \(i\) 个小时,已经睡了 \(j\) 个小时,第 \(i\) 个小时睡觉/不睡觉的最大体力恢复

然后考虑时间连续的情况,上述 DP 是无法包含每天第一天睡觉能回体力的情况的,于是只需要强制最后面小时休息,再进行一次 DP 即可

类似的环上的 DP ,都可以从断环成链的角度考虑

后续

讲完之后广大初中生反应听不懂。

Bow:“还听不懂啊,不应该啊”

........................

2022.7.13 tongyf 讲课纪要的更多相关文章

  1. 2022 07 13 第一小组 田龙跃 Java再学习笔记

    1.类名命名规则: 只能由数字字母,下划线,美元符号组成(不能以数字开头,尽量不要用下划线开头) 2.注释(养成多写注释的好习惯) 单行注释 // ctrl+/ 多行注释 // ctrl+shirt+ ...

  2. Vue学习之--------列表渲染、v-for中key的原理、列表过滤的实现(2022/7/13)

    文章目录 1.基本列表 1.1 基本知识 1.2 代码实例 1.3 测试效果 2.key的原理 2.1基本知识 2.2 代码实例 2.3 测试效果 2.4 原理图解 3.列表过滤 3.1 代码实例 3 ...

  3. 2022.11.13 NOIP2022 模拟赛八

    「ROI 2017 Day 2」存储器 无聊的题. 首先 \(s\) 中每一个片段,其在 \(t\) 中对应的字符必然是相同的. 对于 \(t\) 中的每一个片段,考虑检查能否操作出这个片段,实际上只 ...

  4. 2022.07.13 vue3下pinia的简单使用及持久化

    使用前说明: 当前demo使用了vue3 + vite + typescript + pinia搭建的简单项目,主要介绍了在单文件组件(sfc)基础上使用pinia的用法,懒得看api的兄弟们,来这瞅 ...

  5. rpm---linux软件安装与管理

    linux的安装命令选项太多,整理一下,方便后期查找. 汇总: install: rpm -ivh 包全名 安装 upgrade: rpm -Uvh 包全名 升级 erase: rpm -e 包名 删 ...

  6. MySql基本查询、连接查询、子查询、正则表达查询解说

    林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 查询数据指从数据库中获取所须要的数据.查询数据是数据库操作中最经常使用,也是最重要的操作.用户 ...

  7. mysql数据库查询

    查询数据指从数据库中获取所需要的数据.查询数据是数据库操作中最常用,也是最重要的操作.用户可以根据自己对数据的需求,使用不同的查询方式.通过不同的查询方式,可以获得不同的数据.MySQL中是使用SEL ...

  8. Mysql学习总结(8)——MySql基本查询、连接查询、子查询、正则表达查询讲解

    查询数据指从数据库中获取所需要的数据.查询数据是数据库操作中最常用,也是最重要的操作.用户可以根据自己对数据的需求,使用不同的查询方式.通过不同的查询方式,可以获得不同的数据.MySQL中是使用SEL ...

  9. JavaScript课程——Day07(对象简介、Math对象、时间对象、字符串对象)

    1.对象简介 在javaScipt中,一切皆为对象或者皆可以被用作对象 宿主对象:window,document 内置对象:Number  String  Boolean  Array数组  Obje ...

  10. 读 Linux 像读小说「GitHub 热点速览 v.22.03」

    本周特推选取了一个画风有点意思的 Linux 代码带读项目 flash-linux0.11-talk,希望有趣的文风能带你读完 Linux 代码.当然画风可以增加阅读体验,彩色标记也是一种学习方法-- ...

随机推荐

  1. Avalonia项目在OpenKylin运行踩坑

    Avalonia项目在OpenKylin运行踩坑 本篇博客记录OpenKylin开源操作系统中运行Avalonia项目遇到的各种问题,会一直更新,最新的内容请点击文末的链接跳转到我的博客原文地址查看. ...

  2. Mapbox—geocoder搜索地点error eaching the server

    Mapbox-geocoder搜索地点error eaching the server --There was an errorr eaching the server 环境说明: vue3.3.4 ...

  3. idea 2021新窗口打开工程

    描述 Mac M1,IDEA 2017 有部分兼容性问题,遂对IDEA进行升级 idea 升级2021(IntelliJ IDEA 2021.3 (Community Edition)) 打开新工程, ...

  4. ES6之清楚明白的使用类(class)

    定义 类是构造函数.原型链的语法糖. 定义类有两种方式 class Student { } var Student = class { } 某些浏览器可能无法解析es6及以上的语法,这时候需要通过ba ...

  5. SpringBoot项目统一处理返回值和异常

    目录 简介 前期准备 统一封装报文 统一异常处理 自定义异常信息 简介 当使用SpringBoot开发Web项目的API时,为了与前端更好地通信,通常会约定好接口的响应格式.例如,以下是一个JSON格 ...

  6. [ABC138F] Coincidence

    2023-02-03 题目 题目传送门 翻译 翻译 难度&重要性(1~10):6 题目来源 AtCoder 题目算法 数位dp 解题思路 \(1.\) 当 \(2x\leq y\),有\(y- ...

  7. 《SQL与数据库基础》11. 索引

    目录 索引 概述 结构 B-Tree B+Tree Hash 思考 分类 语法 SQL性能分析 SQL执行频率 慢查询日志 profile详情 explain执行计划 索引失效情况 范围查询 索引列运 ...

  8. 2.14 PE结构:地址之间的转换

    在可执行文件PE文件结构中,通常我们需要用到地址转换相关知识,PE文件针对地址的规范有三种,其中就包括了VA,RVA,FOA三种,这三种该地址之间的灵活转换也是非常有用的,本节将介绍这些地址范围如何通 ...

  9. Web项目如何配置Eslint

    介绍 ESLint 是一个根据方案识别并报告 ECMAScript/JavaScript 代码问题的工具,其目的是使代码风格更加一致并避免错误.在很多地方它都与 JSLint 和 JSHint 类似, ...

  10. MySQL运维1-日志

    一.错误日志 错误日志是MySQL中最重要的日志之一,它记录了当MySQL启动和停止时,以及服务器在运行过程中发生的任何严重错误时的相关信息,当数据库出现任何故障导致无法正常使用时,建议首先查看此日志 ...