首页 > 其他分享 >7.16 动态规划

7.16 动态规划

时间:2023-07-16 12:33:24浏览次数:38  
标签:7.16 奶牛 匹配 牛棚 擦除 废弃 动态 规划 rightarrow

线性DP

[USACO20DEC] Sleeping Cows P

先不考虑极大,将奶牛和牛棚放在一起排序并离散化,设 \(F_{i,j}\) 为处理到第 i 个元素(奶牛/牛棚) ,有 j 头奶牛还没有进入牛棚的方案数。

对于牛棚:

\[F_{i,j}\rightarrow F_{i+1,j} \]

\[j*F_{i,j}\rightarrow F_{i+1,j-1} \]

对于奶牛:

\[F_{i,j}\rightarrow F_{i+1,j+1} \]

考虑极大,一头奶牛可能之后会被匹配,所以我们在加入一头奶牛时就考虑它最终会不会被匹配。

注意到如果废弃了一头奶牛,那么在它之前的牛棚可以被废弃,而在它之后的牛棚不能被废弃。

如果我们去记录一头奶牛被废弃的时间,时间复杂度爆炸,但是我们发现以第一头被废弃的奶牛为分界点,后面的牛棚不能废弃,而之前的可以,所以我们只用关心当前有没有被废弃的奶牛就可以了。

新状态:

\(F_{i,j,0/1}\) 表示当前考虑了大小 \(\le i\) 的奶牛和牛棚,且有j头奶牛还未分配牛棚,目前是否钦定过不被匹配的奶牛,其中 1 表示目前没有被废弃的奶牛。

对于牛棚:

1.\(F_{i,j,1}\rightarrow F_{i+1,j,1}\quad\)废弃这个牛棚

2.\(j*F_{i,j,1}\rightarrow F_{i+1,j-1,1}\quad\)拿这个牛棚去匹配队列的一头待匹配的牛

3.\(j*F_{i,j,0}\rightarrow F_{i+1,j-1,0}\quad\)同上

对于奶牛,讨论废不废弃即可。

1.\(F_{i,j,1}\rightarrow F_{i+1,j+1,1}\)

2.\(F_{i,j,1}\rightarrow F_{i+1,j,0}\)

3.\(F_{i,j,0}\rightarrow F_{i+1,j+1,0}\)

4.\(F_{i,j,0}\rightarrow F_{i+1,j,0}\)

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

「KDOI-03」构造数组

设计状态:\(F_{i,j}\)表示目前处理到第i个,前i-1个\(a_i\)已经全部等于\(b_i\) ( \(b_i归零\) ),后面需要拿出\(j\)与前面配对,加入一个\(a_i\),考虑还债还是继续加债,转移:

枚举拿\(u\)出来还债,其它用来加债

转移待补

\[F_{i,j}(0\le j \le \sum b_{i})*C_{u}^{l}* \]

时间复杂度:\(O((\sum b_i)^2)\)

Rotating Substrings

一次操作实际上是将\(S_r\)拿出来放到\(s_{l-1}\)和\(s_l\)之间。

设计状态:

\(F_{i,j}\)表示考虑S后缀i-n,T后缀j-n,最少拿元素使后缀匹配

\(1. F_{i,j}\leftarrow F_{i+1,j+1}\quad(s_i=t_j)\)

\(2.F_{i,j}\leftarrow F_{i+1,j}+1\)

\(3.F_{i,j}\leftarrow F_{i,j+1} \; the\;number\;of\;t_j\;in\;T \le the\;number\; of\;t_j\;in\;S\)

Array Beauty

排序,设\(F_{i}\)表示美观度\(\ge i\)的方案数

答案即为\(\sum F_i\)

设计\(dp_{i,j}\)指前i个,\(a_i\)必选,序列长度为j

转移:待补

「USACO 2021.12 Platinum」Paired Up

匹配互不相交(因为相交可以交换),设计\(F_{i,j}\)表示考虑i头h奶牛和j头s奶牛

树形dp

Maximizing Root

待补

Tree Elimination

通过序列可以还原出擦边顺序,记\(F_{u,0/1/2/3}\)表示点u没擦除标记/擦除边在父边之前/擦除边为父边/擦除边在父边之后

按(u,v)的出边编号从小到大转移,形式有3种,分别为u擦除前/擦除时/擦除后

标签:7.16,奶牛,匹配,牛棚,擦除,废弃,动态,规划,rightarrow
From: https://www.cnblogs.com/Linnyx/p/17557692.html

相关文章

  • 6194: jump and jump 深搜/广搜/动态规划
    描述  寒假在家里无聊极了,小w看到地上的瓷砖,想出了一个游戏。这个游戏是这样子的,一共有n个格子,刚开始在起点的时候可以跳到第1个到第k个格子中的一个上面,之后在每个格子上只能向前跳相对应的长度。请问至少需要多少步可以恰好跳到最后一个格子呢?输入  第一行输入两......
  • .NET Native AOT的静态库与动态库
    .NET不仅可以使用C静态库与动态库,也可以将.NET实现的函数导出为C静态库与动态库。在没有NativeAot之前,.NET只能通过P/Invoke享受C/C++生态,而在NativeAot之后,不仅可以享受这些生态,还可以开发SDK供其他语言调用。.NETNativeAOT的NativeLib参数用于指定本机库的类型。在.NET7......
  • 关于AWS-阿里-堡垒机Console界面-登录-多因子MFA-认证的动态口令生成的python实现
    对于很多公司来说、都会要求在登录云平台,如AWS云,阿里云,或者堡垒机Console,甚至操作系统时,都会要求登录时,进行二次认证也即是多因素,多因子,MFA认证,关于多因素认证、一般有短信验证码,软件生成code,或者邮件接收Code,都可以实现今天笔者主要讲述,如何通过python代码进行实现,AWS,阿里云、......
  • 集装箱多式联运——动态规划
    物流运输方式由公路、铁路、水路、空运及管道等5种方式组成,5种运输方式在技术上、经济上各有长短,都有适宜的使用范围,每种运输方式单独运用很难实现节约资源、降本增效。随着我国经济不断发展以及布局网络技术的不断深化,多式联运通过把传统的、单一的运输方式进行择优组合,充分利......
  • 67.requireJS的核心原理是什么(如何动态加载的如何避免多次加载的如何缓存的)
    67.requireJS的核心原理是什么?(如何动态加载的?如何避免多次加载的?如何缓存的?)require.js的核心原理是通过动态创建script脚本来异步引入模块,然后对每个脚本的load事件进行监听,如果每个脚本都加载完成了,再调用回调函数。详细资料可以参考:《requireJS的用法和原理分析》......
  • [USACO23OPEN] Field Day S 田野日 - 动态规划
    提供一个简单的DP思路。##0x01重点信息可以先找出题目中的一些重点信息。-字符串中只有$G$与$H$。-$N$很大($2\leqN\leq10^5$),但$C$很小($1\leqC\leq18$)。##0x02思路既然字符串中只有$G$与$H$,我们不妨将字符串转化为二进制数字(如$1$代表$G$,$0$代......
  • 数学规划
    什么是数学规划通俗地讲就是求目标函数在一定的约束条件下的极值问题一般形式:min或者maxz=f(x) x:决策变量(一般有多个自变量)数学规划问题的分类1、线性规划问题如果目标函数和约束条件均是线性表达式,那么此时的数学规划问题就属于线性规划问题2、非线性规划问题3、......
  • 反射与动态导入
    1.创建如下结构目录以及python文件 2.现在在app.py就可以import 通过字符串导入模块 通过字符串导入模块,再通过getattr拿到成员 通过注册的底层源码分析 最后返回的就是(app里的url,None,None) 最终形态 ......
  • 动态DP
    题目链接题目大意:动态维护树上最大权独立集。所谓动态DP,就是把原先能用DP解决的问题变成动态维护DP值。如果DP数组可以支持合并两条链的话,可以直接用线段树维护,否则需要考虑把DP的转移改成矩阵,这样就可以用线段树维护矩阵,不过支持合并链以及维护矩阵都需要树链剖分,所以......
  • 45. 动态规划
    一、什么是动态规划  动态规划(DynamicPorogramming)是算法的核心是:将大问题划分为小问题进行解决,从而一步步获取最优解的处理算法。动态规划与分治算法类似,不同的是,适用于动态规划求解的问题,经分解得到子问题往往不是互相独立的,即下一个子阶段的求解是建立在上一个子阶段的基础......