7.28 day5 dp

战绩:
100+80+60+72=312 rk4

T1

感觉作为签到有点难,考场一开始看了20分钟,先开了T2

卡住的原因是注意到异或并不具有结合律和分配律,那么如果我们要直接dp答案,是非常困难的

dp的本质是将相同类信息合并在一起处理

注意到异或最大值不超过128(不进位加法)

于是我们想到将异或和放到状态上,改为dp方案树,此时dp转移就很显然了

时间复杂度:O(nmV)

T2

先开的,想到了昨天的宝石,直接无脑写了,然后大样例对了,但是不会分析时间复杂度。考完了才发现是O(N3)

只需套用树上dp的一些小技巧,就可以降到n2

fu,j为点u子树中向上递增结束点为u的方案

gu,j为点u子树中向上递减结束点为u的方案数

在lca处统计,用动态数组存状态

时间复杂度:O(n2)

T3

暴力dp 时间复杂度O(nm3)

考虑按位考虑,设计fi,j为考虑到第 i 位,且之前每一位都与m对应位相同,加起来后向下一位进位j位的方案数,同时设计gi,j为其异或和之和

fi,j转移就枚举这一位填几个1,上一位的进位,只需保证与m对应位奇偶相同即可,别忘记加上上一位的进位

对于gi,j,填x个1,能创造的方案为Cnx,则异或和的贡献就是之前的贡献加上这位的贡献乘上方案数

时间复杂度O(n2logm)

T4

有一道前置

有 n 个房间,m 个人。第 i 个人能进入第 [li,ri] 个房间。若最终一个房间里有 x 个人,则这个房间会有 x2 的快乐值。问所有房间最大的快乐值总和是多少。

显而易见的,我们希望尽量多的人汇聚到一个房间

区间dp

设计fl,r表示只考虑被完全包含于[l,r]区间内的人,能创造的最大快乐值之和

枚举汇聚最多人的房间k,转移有

fl,r=max(fl,k1+fk+1,r+vk2)

vk指能到房间k的人数量

考虑做一个类似二维前缀和一样的东西记录被完全包含于区间[l,r]的人个数,记为sl,r

那么vk=sl,rsl,k1sk+1,r

这道题就解完了,时间复杂度O(n3)

类似的,我们设fl,r为考虑被完全包含于[l,r]区间内的人,能创造的最大经济

转移;

fl,r=max(fl,k1+fk+1,r+gk,t)

gk,t指有t人到第k家店时的最大收益

可以预处理

gi,j=max(kjci,k)

k指标准度,此时就是经典的斜率优化柿子了

时间复杂度O(n3+nk)

posted @   Linnyx  阅读(13)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
点击右上角即可分享
微信分享提示