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,转移有
\(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]\)区间内的人,能创造的最大经济
转移;
\(g_{k,t}\)指有t人到第k家店时的最大收益
可以预处理
k指标准度,此时就是经典的斜率优化柿子了
时间复杂度\(O(n^3+nk)\)