码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 一些 dp 题


    CYEZ 弹珠

    key:问题转换,完全背包

    先每个组分一个小球。等价于 n − k n-k n−k 拆分为任意个 [ 1 , k ] [1,k] [1,k] 的数的方案数。

    本质是根据面积的转换,直观解释:

    在这里插入图片描述

    完全背包即可。代码。

    No Bug No Game

    key:exchange argument,背包

    子序列

    SOL1:

    key:LIS,动态开点,线段树

    记 f i f_i fi​ 为以 a a a 中第 i i i 个数结尾的最长的好的子序列。

    f i = max ⁡ j < i , a j ⋅ b f j ≤ a i f j + 1 f_i = \max\limits_{jfi​=j<i,aj​⋅bfj​​≤ai​max​fj​+1

    可以用动态开点权值线段树优化。代码。

    CYEZ 01 矩阵

    key:问题转换

    两张 n n n 个点的二分图 A B, ( x , y ) = 1 (x,y)=1 (x,y)=1 视为 A 中点 x x x 向 B 中点 y y y 连边,这样二分图中显然会形成若干个环,环为偶环且大小 > 2 >2 >2。题目中交换行列后不同相当于在二分图中交换点的编号,转换为无标号环凑成 2 n 2n 2n 个点的方案数。等价于 > 1 >1 >1 的数无序组成 n n n 个点的方案数。

    代码

    Bribing Friends G

    key:贪心 + dp

    确定选择奶牛方案时,甜筒一定优先作用于 x x x 较小的奶牛。那么按 x x x 排序后,最终的答案一定形如:用甜筒处理前几个,用甜筒和钱混合处理某一个,用钱处理后几个。

    分别 01 背包处理,枚举断点即可。

    代码

    特殊的区间 dp 类问题——折线类问题

    轨迹类似折线的一类问题,这类问题通常在区间 dp 的基础上记录左 / 右端点。

    The Cow Run G/S

    模板。

    根据 f ( l , r , 0 / 1 ) f(l,r,0/1) f(l,r,0/1) 总是同时出现的性质可以少讨论一种情况。

    代码

    更简单的一种实现,记 f ( l , r , 0 / 1 ) f(l,r,0/1) f(l,r,0/1) 表示为当前点左端剩 l l l 个,右端剩 r r r 个点,位于左 / 右端点的最小代价。每次决策向左或向右即可。代码。

    关路灯

    模板基础上套个前缀和。

    代码

    Turning in Homework G

    折线类 dp 基础上有一个等待机制。

    key:贪心 + dp,区间 dp

    贪心:一定先处理外端的点。证明:先处理外端点可以使处理内端点等待的时间变短。相反,先处理内端点后还要出去处理外端点导致重复移动。

    故设计 f ( l , r , 0 / 1 ) f(l,r,0/1) f(l,r,0/1) 表示刚刚处理完 l / r l/r l/r, [ l , r ] [l,r] [l,r] 未处理(不包括 l / r l/r l/r)的最小代价。

    考虑转移,以 f ( l , r , 0 ) f(l,r,0) f(l,r,0) 为例:在这里插入图片描述
    如图,1 优于 2 的原因: f ( l − 1 , r , 0 ) ≤ f ( l − 1 , r , 1 ) + d i s ( l − 1 , r ) f(l-1,r,0) \le f(l-1,r,1) + dis(l-1,r) f(l−1,r,0)≤f(l−1,r,1)+dis(l−1,r)。3 优于 4 同理。

    故转移只考虑 f ( l − 1 , r , 0 ) f(l-1,r,0) f(l−1,r,0) 以及 f ( l , r + 1 , 1 ) f(l,r+1,1) f(l,r+1,1) 即可。

    代码

    JOI2020 Collecting Stamps

    key:破环为链,区间 dp

    先看链的情况。采用一般折线类方式设计 f ( l , r , 0 / 1 ) f(l,r,0/1) f(l,r,0/1) 会发现这样无法推得最优解,因为转移时不一定是最短 / 最多。考虑升维。记 f ( l , r , i , 0 / 1 ) f(l,r,i,0/1) f(l,r,i,0/1) 表示获得了 i i i 个的最短时间。转移类似前两题,答案取一个最大的可能 i i i 即可。

    然后做一个等价转换——破环为链。将序列扩展为长 2 n 2n 2n 的序列,对长度不超过 n n n 的区间做转移 / 求答案。对于 l = r l=r l=r 边界情况,距离为到 L L L 或到 0 0 0 的距离。

    代码

  • 相关阅读:
    JZ-7GY-S002XMC跳合位电源监视继电器
    02、MongoDB -- MongoDB 的安全配置(创建用户、设置用户权限、启动安全控制、操作数据库命令演示、mongodb 的帮助系统介绍)
    苏东坡在元丰五年
    2024国际生物发酵展畅想未来-势拓伺服科技
    【ai】pycharm设置软件仓库编译运行基于langchain的chatpdf
    #include “ascii_font.c“ 引入源文件,Keil5为什么没有提示重复定义错误,详解!!!
    网站服务器域名怎么配置的
    【设计模式】Java设计模式 - 享元模式
    分享三款免费好用的远程控制软件!
    gRPC之拦截器与元数据
  • 原文地址:https://blog.csdn.net/weixin_73113801/article/details/133410066
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号