首页 > 其他分享 >洛谷上扒的DP练习题

洛谷上扒的DP练习题

时间:2022-10-24 16:00:09浏览次数:111  
标签:练习题 状态 结点 背包 洛谷 区间 例题 DP

DP综述

  • 最优子结构:把原问题化到规模更小的问题后,原问题的最优解一定能从规模更小问题的最优解推出。
  • 无后效性:如果在某个阶段上过程的状态已知,则从此阶段以后过程的发展变化仅与此阶段的状态有关,而与过程在此阶段以前的阶段所经历过的状态无关。
  • 状态:类似搜索中所说的状态,就是怎么描述求解过程中的一个阶段。希望状态完整而不冗余地定义清楚子问题。
  • 为什么动态规划和搜索相比更优秀?我们找出转移模式相同的、本质类似的那些状态,将其合并在一个新状态中,从而减少总的状态数量和转移路径数量。

解题套路

  • 寻找子问题
  • 设计状态描述
  • 写出转移规则
  • 确定边界

线性DP

往往用\(F_{i,s}\)表示区间\([1,i]\)在状态限制\(s\)下的最优解。

例题

P4310 绝世好题
P1944 最长括号匹配
P1772 [ZJOI2006]物流运输


背包DP

  • 01背包
  • 完全背包
  • 多重背包
    • 二进制拆分
    • 斜率优化
  • 分组背包
  • 树形背包

例题

P4158 [SCOI2009]粉刷匠
P1284 三角形牧场
P1156 垃圾陷阱
P1941 飞扬的小鸟
P1282 多米诺骨牌
P5322 [BJOI2019]排兵布阵
P2224 [HNOI2001]产品加工
P3188 [HNOI2007]梦幻岛宝珠
P4141 消失之物
P2340 [USACO03FALL]Cow Exhibition G
P4095 [HEOI2013]Eden的新背包问题
P2851 [USACO06DEC]The Fewest Coins G


区间DP

依照子区间来定义子问题。
大区间的求解依赖于其内部小区间的求解。
往往用\(F_{l,r,s}\)表示区间\([l,r]\)在状态限制\(s\)下的最优解。
按照区间长度从小到大依次求解。
单点构成的区间或空区间无需递归。

TIPS :尝试下面三种转移思路

  • \(F_{l,r,s} = max{F_{l+1,r,s'},F_{l,r-1,s'}}\)
  • \(F_{l,r,s} = max_{l\leq k<r}{f(F_{l,k,s'},F_{k+1,r,s'})}\)
  • \(F_{l,r,s} = max_{l\leq k\leq r}{f(F_{l,k,s'},F_{k,r,s'})}\)

例题

P1040 加分二叉树
P2890 [USACO07OPEN]Cheapest Palindrome G
P4170 [CQOI2007]涂色
UVA1437 String painter
CF149D Coloring Brackets
P5851 [USACO19DEC]Greedy Pie Eaters P
UVA1629 切蛋糕 Cake slicing
P3205 [HNOI2010]合唱队

树形DP

问题定义在树形结构上,依照子树设定子问题。
常常用\(F_{u,s}\)表示子树\(u\)在状态限制\(s\)下的最优解。
先递归求解子树的答案,再计算当前结点答案。

普通树形DP

例题

P1122 最大子树和
P1352 没有上司的舞会
P4084 [USACO17DEC]Barn Painting G
P2016 战略游戏
P2458 [SDOI2006]保安站岗
P3621 [APIO2007]风铃
P4099 [HEOI2013]SAO
P3174 [HAOI2009]毛毛虫
P3237 [HNOI2014]米特运输

树形依赖背包

要选取一个结点上的物品,需要选取其父结点的物品。

  • 朴素写法:枚举子树分配体积(01背包用点对数量分析)
  • 2009年国家集训队论文 徐持衡《浅谈几类背包题》
  • 借助DFS序拍平成线性结构
DFS序为\(i\)的点子树大小为\(S_i\),体积为\(W_i\),价值为\(V_i\),\(F_{i,j}=\max\{F_{i+S_i,j},F_{i+1,j-W_i}+V_i\}\) (i从大到小倒序枚举)

例题

P1273 有线电视网
P2014 [CTSC1997]选课
P2015 二叉苹果树
P3177 [HAOI2015]树上染色
P3354 [IOI2005]Riv 河流
P1270 “访问”美术馆
P4322 [JSOI2016]最佳团体
P1272 重建道路
P4037 [JSOI2008]魔兽地图


换根

  • 先以1为根结点,求出\(F_u\)表示\(u\)子树的最优解
  • 考虑将根结点换到1的邻点2上,只有1和2两个结点的相对关系发生变化,快速地计算出新的\(F_1\)和\(F_2\)
  • 继续换根直到尝试过以每个点为根结点
  • 回溯操作就是递归操作的逆

例题


P3478 [POI2008]STA-Station


P2986 [USACO10MAR]Great Cow Gathering G

P3047 [USACO12FEB]Nearby Cows G
P5898 [COCI 2015]Kamp
P3647 [APIO2014]连珠线

基环树DP

例题

P1453 城市环路
P2607 [ZJOI2008]骑士


From here

标签:练习题,状态,结点,背包,洛谷,区间,例题,DP
From: https://www.cnblogs.com/zxyc/p/16821742.html

相关文章

  • P1880 [NOI1995] 石子合并 (区间DP)
    [NOI1995]石子合并题目描述在一个圆形操场的四周摆放\(N\)堆石子,现要将石子有次序地合并成一堆,规定每次只能选相邻的\(2\)堆合并成新的一堆,并将新的一堆的石子数,记......
  • Codeforces Round #829 (Div. 2) E // 概率dp
    题目来源:CodeforcesRound#829(Div.2)E-WishIKnewHowtoSort题目链接:Problem-E-Codeforces题意给定大小为\(n\)的仅包含\(0\)、\(1\)的数组\(a\),每......
  • PostgresqlAndPostGis
    Postgresql&PostGis问题及解决方法关于postGIS没有template_postgis模版的问题解决//1、建立普通数据库createdatabasexx;//2、然后输入官网给的这几条添加......
  • RabbitMQ.Client.Exceptions.BrokerUnreachableException:“None of the specified en
    RabbitMQ和程序运行在同一台电脑上可以使用guest账号访问如果不在同一台电脑,就会报错RabbitMQ.Client.Exceptions.BrokerUnreachableException:“Noneofthespecified......
  • chooseLocation:fail the api need to be declared in the requiredPrivateInfos fiel
    错误描述在使用uni-app开发微信小程序的时候,想要通过uni.chooseLocation获取用户地理位置的时候出现chooseLocation:failtheapineedtobedeclaredintherequiredPr......
  • docker安装wordpress--亲测OK
    环境:centos7   Wordpress:6.0.1   Mysql:8.0网上太多资料不全,主要是没有数据的配置。还是自己测试成功,才能明白。大道至简,各有其道。https://baijiahao.baidu.com......
  • Oracle使用expdp/impdp实现数据库迁移
    Oracle使用expdp/impdp实现数据库迁移导出0.准备导出路径cd/u01/app/oraclemkdirbak&&chmod777bak1、创建目录(sqlplus)createdirectorybakas'/u01/app......
  • Java多线程(3):ThreadPool(上)
    您好,我是湘王,这是我的博客园,欢迎您来,欢迎您再来~ 开完一趟车完整的过程是启动、行驶和停车,但老司机都知道,真正费油的不是行驶,而是长时间的怠速、频繁地踩刹车等动作。因......
  • 练习题11-
    1、项目需求:请用户从控制台输入信息,程序将信息存储到文件Info.txt中。可以输入多条信息,每条信息存储--行。当用户输入:”886”时,程序结束。packagecom.xxx.title1;i......
  • 练习题10-
    1、模拟上车案例:有一辆车,有100个座位,有前中后三个门每个门都可以随机上人,上人的个数不确定。packagecom.xxx;importjava.util.Random;publicclassCarRunnable......