luogu-P3262题解

news/2024/11/13 13:23:20/文章来源:https://www.cnblogs.com/Nekopedia/p/18538989

简要题意

有一棵不超过十层的满二叉树,需要对每个节点进行染色。每个叶子节点会对其颜色相同的祖先节点产生贡献且黑白贡献不同。求最大贡献。

题解

首先我会暴力!我如果直接暴力枚举每个节点的颜色,复杂度就是 \(O(2^{2^n})\)。然后还要算贡献,所以还有一个 \(O(2^{n-1}(n-1))\)。然后肯定爆了。

不用说都知道是因为我们在枚举的时候重复枚举了很多相同的状态,这时我们应该单独考虑贡献。对于一个点,它的贡献应该只与其祖先节点有关,而我们暴力是去枚举了其他无关的节点。所以我们就可以设计一个 \(f_{u,S}\) 表示当前考虑到 \(u\) 节点,\(u\) 的祖先状态为 \(S\) 时子树最大贡献。然后题目中还有对黑点的个数限制,所以我们还需要加一维表示子树内黑点个数。所以最终状态是 \(f_{u,S,cnt}\) 表示 \(u\) 的子树内,其祖先染色状态为 \(S\) 且子树内有 \(cnt\) 个黑点时最大贡献。然后对于任意节点,假设它在第 \(x\) 层,则它的祖先结点状态数为 \(2^{x-1}\),子树大小为 \(2^{n-x+1}-1\),所以时间复杂度为 \(O(n\times2^n)\)。但是空间是 \(O(n\times2^{2n})\),所以我们就在搜索状态的过程中记录一个状态 \(S\),数组就只用开二维。

转移其实就是合并两个子树的信息,所以直接预处理出叶子节点的答案,然后跑一遍 \(dfs\) 然后类似合并背包一样做即可。

代码

inline void upd(int &x, int y){x = x > y ? x : y;}void dfs(int u, int sta, int dep){if(dep == n)return(void)(f[u][0] = c[u - lim][sta][0], f[u][1] = c[u - lim][sta][1]);for(int i = 0; i <= qp[dep]; ++i)f[ls][i] = f[rs][i] = 0;dfs(ls, sta, dep + 1); dfs(rs, sta, dep + 1);for(int i = 0; i <= qp[dep]; ++i)for(int j = 0; j <= qp[dep]; ++j)upd(f[u][i + j], f[ls][i] + f[rs][j]);for(int i = 0; i <= qp[dep]; ++i)f[ls][i] = f[rs][i] = 0;dfs(ls, sta + qp[dep], dep + 1), dfs(rs, sta + qp[dep], dep + 1);for(int i = 0; i <= qp[dep]; ++i)for(int j = 0; j <= qp[dep]; ++j)upd(f[u][i + j], f[ls][i] + f[rs][j]);
}
signed main(){n = rd(), m = rd(); lim = 1 << n - 1;for(int i = 0; i < lim; ++i)for(int j = 0; j < n - 1; ++j)v[i][j][1] = rd();for(int i = 0; i < lim; ++i)for(int j = 0; j < n - 1; ++j)v[i][j][0] = rd();qp[n - 1] = 1; for(int i = n - 2; ~ i; --i)qp[i] = qp[i + 1] << 1;for(int i = 0; i < lim; ++i)for(int j = 0; j < lim; ++j)for(int k = 0, bit = i; k < n - 1; ++k, bit >>= 1)c[j][i][bit & 1] += v[j][k][bit & 1];dfs(1, 0, 1); int ans = 0;for(int i = 0; i <= m; ++i)upd(ans, f[1][i]);wt(ans);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/831597.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024/11/11

软件设计 实验12:外观模式 在计算机主机(Mainframe)中,只需要按下主机的开机按钮(on()),即可调用其他硬件设备和软件的启动方法 ,如内存(Memory)的自检(check())、CPU的运行(run())、硬盘(HardDisk)的读取(read())、操作系统(OS)的载入(load()),如果某一过程发生错误则计算…

2024.11.6(周三)

用透明组合模式实现教材中的“文件夹浏览”这个例子。 实验要求: 1.文件的执行不需真正实现,只需简单提示即可; 2.提交源代码; 3.注意编程规范。1、类图2、源代码 #include <iostream> #include <string> #include<list> using namespace std;class Abst…

2024.11.7(周四)

用装饰模式模拟手机功能的升级过程:简单的手机(SimplePhone)在接收来电时,会发出声音提醒主人;而JarPhone除了声音还能振动;更高级的手机(ComplexPhone)除了声音、振动外,还有灯光闪烁提示。 实验要求: 1.提交类图; 2.提交源代码; 3.注意编程规范。1、类图2、源代码 #i…

2024.11.5(周二)

用桥接模式实现在路上开车这个问题,其中,车可以是car或bus,路可以是水泥路或沥青路。 实验要求: 1.画出对应的类图; 2.提交源代码; 3.注意编程规范。1、类图2、源代码 (1) Bus.java package test;public class Bus implements Vehicle{@Overridepublic void run() {Sy…

CFAT:三角窗口实现图像超分辨率

CFAT:三角窗口实现图像超分辨率基于变换器的模型通过利用其固有的捕获复杂上下文特征的能力,彻底改变了图像超分辨率(SR)的效果。如今,在Transformer架构中使用的重叠矩形移位窗口技术是超分辨率模型中的一种常见做法,可以提高图像放大的质量和鲁棒性。然而,它在边界处存…

CFAT:释放三角窗口实现图像超分辨率

CFAT:释放三角窗口实现图像超分辨率基于变换器的模型通过利用其固有的捕获复杂上下文特征的能力,彻底改变了图像超分辨率(SR)的效果。如今,在Transformer架构中使用的重叠矩形移位窗口技术是超分辨率模型中的一种常见做法,可以提高图像放大的质量和鲁棒性。然而,它在边界…

读数据工程之道:设计和构建健壮的数据系统34读后总结与感想兼导读

读后总结与感想兼导读1. 基本信息 数据工程之道:设计和构建健壮的数据系统[美]乔里斯(Joe Reis),[美]马特豪斯利(Matt Housley)著机械工业出版社,2024年2月出版1.1. 读薄率 书籍总字数473千字,笔记总字数109584字。 读薄率109584473000≈23.17% 1.2. 读厚方向Data Mesh权威指…

鸿蒙NEXT开发案例:抛硬币

【1】引言(完整代码在最后面) 本项目旨在实现一个简单的“抛硬币”功能,用户可以通过点击屏幕上的地鼠图标来模拟抛硬币的过程。应用会记录并显示硬币正面(地鼠面)和反面(数字100面)出现的次数。为了增强用户体验,我们还添加了动画效果,使抛硬币的过程更加生动有趣。 …

【CodeForces训练记录】Codeforces Round 986 (Div. 2)

训练情况赛后反思 C题逆风翻盘,可能勉强青名了。A题愣神了,我觉得还能再做的快一点。 A题 给定一个字符串,NWSE,重复着字符串走,我们直接模拟即可,用 while 来判断是否走到终点,然后对于不可能走到的终点,我选择了一个不会超时的步数范围,超出就跳出 while 即可,最后…

24. 使用MySQL之使用游标

1. 游标 由前几章可知,MySQL检索操作返回一组称为结果集的行。这组返回的行都是与SQL语句相匹配的行(零行或多行)。 使用简单的SELECT语句,例如,没有办法得到第一行、下一行或前10行,也不存在每次一行地处理所有行的简单方法(相对于成批地处理它们)。 有时,需要在检索…

Python clickhouse-driver 类库使用学习总结

实践环境 python3 .9.13 clickhouse-driver 0.2.9 实践操作 # -*- coding:utf-8 -*-import clickhouse_driverif __name__ == __main__:host = 192.168.88.131port = 9000 # 注意,不能使用默认的8123username = testaccpassword = test1234database = default# 连接方式1# con…

随波逐流工具使用_Week1

跟着大师傅的公众号做题的week1 来源以及说明 (文章主要是了解怎样使用长弓三皮大师傅的随波逐流工具,wp以及附件来自大师傅长弓三皮) (这周主要是做笔记的软件老是出现问题,有一些笔记有点乱,后面慢慢改进) 软件及题目下载 http://www.1o1o.xyz/bo_softdown.html CTF题目wr…