7.28 day5 dp

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

T1

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

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

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

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

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

时间复杂度:\(O(nmV)\)

T2

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

只需套用树上dp的一些小技巧,就可以降到\(n^2\)

\(f_{u,j}\)为点u子树中向上递增结束点为u的方案

\(g_{u,j}\)为点u子树中向上递减结束点为u的方案数

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

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

T3

暴力dp 时间复杂度\(O(nm^3)\)

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

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

对于\(g_{i,j}\),填x个1,能创造的方案为\(C_n^x\),则异或和的贡献就是之前的贡献加上这位的贡献乘上方案数

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

T4

有一道前置

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

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

区间dp

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

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

\[f_{l,r}=max(f_{l,k-1}+f_{k+1,r}+v_k^2) \]

\(v_k\)指能到房间k的人数量

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

那么\(v_k=s_{l,r}-s_{l,k-1}-s_{k+1,r}\)

这道题就解完了,时间复杂度\(O(n^3)\)

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

转移;

\[f_{l,r}=max(f_{l,k−1} + f_{k+1,r} + g_{k,t}) \]

\(g_{k,t}\)指有t人到第k家店时的最大收益

可以预处理

\[g_{i,j}=max(k*j-c_{i,k}) \]

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

时间复杂度\(O(n^3+nk)\)

posted @ 2023-07-28 14:09  Linnyx  阅读(10)  评论(0编辑  收藏  举报