CQ 周赛 Round#1

题目见此

B. L 覆盖

仔细分析样例后可以发现一个结论,第一次先用 L 形状覆盖最少的 1,那么后面每次操作只覆盖 11,且存在这种覆盖方式。

参考代码:code

D. 非零和

考虑分段的本质是什么,其实就是给每个元素乘上 11,且不能有两个相邻元素都乘上 1

于是考虑,初始时假设每个元素都乘上了 1,现在我们需要将其中一些元素改为乘上 1,修改的两个元素不能相邻。

直接贪心地选取即可,从前往后枚举每个元素,判断若当前元素乘上 1,元素和的绝对值是否会减小,若减小就操作,然后用数组记录下一个元素不能再乘上 1

贪心的正确性也很好证明,若当前元素乘上 1 后,元素和的绝对值会减小,但是我们不修改当前元素,那么下一个元素最多也只会让元素和的绝对值减小相同的数(因为数值只有 0,1,1),所以我们先对当前元素进行修改,一定不会更劣,就做完了。

F. 树染色方案计数

一道很有意思的树形 dp,和 P4516 潜入行动 非常相似。

考虑状态怎么定义。第一个维度肯定是以 i 为根的子树,第二个维度是当前子树中的特殊节点个数,同时还要考虑当前节点的颜色,即为第三个维度。

当前节点的颜色无非跟 k 有关,即小于 k,等于 k,大于 k 这三种关系,将这三种关系记为 0/1/2。故定义 dpi,j,k 表示以 i 为根的子树中有 j 个特殊节点,且当前节点颜色编号关系是 k 的染色方案数。

考虑初始化。dpi,0,1=k1,dpi,1,1=1,dpi,0,2=mk

考虑转移。套路的来讲,若 xy 的父亲,则枚举 x 选择 j 个点,枚举 y 选择 k(kj) 个点。即为 dpx,j=combine(dpx,jk,dpy,k)

此题中,因为加上了 k 这个维度,所以需要讨论 k=0/1/2 这三种情况。

  • k=0,即当前节点颜色编号小于 k,则儿子随便选。
    dpu,j,0=dpu,jk,0×(dpv,k,0+dpv,k,1+dpv,k,2)
  • k=1,即当前节点颜色编号等于 k,则儿子颜色编号只能小于 k
    dpu,j,1=dpu,jk,1×dpv,k,0
  • k=2,即当前节点颜色编号大于 k,儿子颜色编号除了 k 其他都可以选。
    dpu,j,2=dpu,jk,2×(dpv,k,0+dpv,k,2)

答案即为 i=0xj=02dp1,i,j

代码:code

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