DP Record
从 2024/5/4 往后开始记录捏。
T1.
给你一棵树,定义一个集合的权值为 \(\dfrac{\sum_{x\in S}V_x}{\sum_{x\in S}C_x}\)。若一个点 \(\in S\),则其父亲也必须 \(\in S\) 并且 \(|S| = k\)。求满足条件的所有集合的最大价值。\(n,k \le 2500\)。
Solution:
注意到那一个奇妙的式子和这个奇妙的条件,我们可以联想到 \(0/1\) 分数规划。不会的出门右转。
我们定义 \(dp_{u,s}\) 为在 \(u\) 的子树下我们一共选择了整整 \(s\) 个点。
所以我们可以对于每一个儿子节点都举出他的子树中选择了多少个点然后对于所有情况取个 \(\max\) 即可的到 \(dp_{u,s}\)。然后我们在进行 \(0/1\) 分规即可。

T2.Sam数
我们定义 \(dp_{i,j}\) 为第 \(i\) 为是 \(j\) 的方案数。于是我们可以非常迅速的得到递推式,\(dp_{i,x} = \sum^{j + 2}_{x = j - 2} dp_{i - 1,x}\)。
但是这个算法的复杂度明显为 \(O(n)\),可以得到 \(30\) 分的高分。但是对于 \(n \le 10^{18}\),我们需要 \(O(\log n)\) 的写法。
对于这个式子,我们可以考虑使用矩阵快速幂进行优化。
矩阵非常好推,自己写。
T3.P3412
较为综合的好题。
我们发现题目等价于把 \(a\) 作为根,然后其余的节点到 \(a\) 的期望值之和。然后我们可以枚举每一个 \(a\) 进行计算。
我们定义 \(dp_u\) 为 \(u\) 子树内其所有的点到 \(u\) 的期望步数。如果这个点的所有子树都聚集到了这个点上,但是我们无法计算出这个点去到其父亲的期望步数。
于是我们再定义 \(g_u\) 为 \(u\) 节点到其父亲的期望步数。
然后我们考虑如何转移 \(g_u\)。
\(u\) 直接走到了他的父亲。
他往下走了。
则有 \(g_u = \dfrac{1}{deg_u} + \sum_{v \in son_u} \dfrac{g_v + g_u + 1}{deg_u}\)。
所以 \(g_u \times deg_u = 1 + \sum_{v \in son_u}(g_v + g_u + 1) = deg_u + (deg_u - 1) \times g_u + \sum_{v \in son_u}g_v\)。
于是 \(g_u = deg_u + \sum_{v \in son_u}g_v\)。
然后我们来计算 \(dp_u\)。\(dp_u = \sum_{v \in son_u}dp_v + g_v \times siz_v\),这是显而易见的。
时间复杂度为 \(O(n^2)\)。
由于每一个节点均有可能作为根节点,所以我们考虑换根 \(dp\)。
假设 \(h_u\) 为以 \(u\) 为根节点,其他节点到这个点的期望步数之和。显然的答案为 \(\dfrac{\sum_{u = 1}^{u \le n} h_u}{n^2}\)。
按照正常的换根 \(dp\) 的转移方式转移即可。
所以可以得出 \(h_u = dp_u + h_{fa_u} - dp_u - siz_u \times g_u + (n - siz_u) \times (g_1 - g_n)\)。
特殊的 \(h_1 = f_1\)。
这样子我们就可以将这个题的复杂度化为 \(O(n)\) 了。
DP Record的更多相关文章
- 2013 Asia Changsha Regional Contest---Josephina and RPG(DP)
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=4800 Problem Description A role-playing game (RPG and ...
- UVALive - 3942 Remember the Word[Trie DP]
UVALive - 3942 Remember the Word Neal is very curious about combinatorial problems, and now here com ...
- 【UVA 1380】 A Scheduling Problem (树形DP)
A Scheduling Problem Description There is a set of jobs, say x1, x2,..., xn <tex2html_verbatim_ ...
- 【HDU 5370】 Tree Maker(卡特兰数+dp)
Tree Maker Problem Description Tree Lover loves trees crazily. One day he invents an interesting gam ...
- LA 3942 Remember the Word(前缀树&树上DP)
3942 - Remember the Word Neal is very curious about combinatorial problems, and now here comes a pro ...
- Day1:T3 bfs T4 树形DP
T3:BFS 回看了一下Day1的T3...感觉裸裸的BFS,自己当时居然没有看出来... 同时用上升和下降两种状态bfs即可 这一题还要注意一个细节的地方,就是题目要求的是求往返的最优解 k=min ...
- [LeetCode] Student Attendance Record II 学生出勤记录之二
Given a positive integer n, return the number of all possible attendance records with length n, whic ...
- dp方法论——由矩阵相乘问题学习dp解题思路
前篇戳:dp入门——由分杆问题认识动态规划 导语 刷过一些算法题,就会十分珍惜“方法论”这种东西.Leetcode上只有题目.讨论和答案,没有方法论.往往答案看起来十分切中要害,但是从看题目到得到思路 ...
- 算法进阶面试题05——树形dp解决步骤、返回最大搜索二叉子树的大小、二叉树最远两节点的距离、晚会最大活跃度、手撕缓存结构LRU
接着第四课的内容,加入部分第五课的内容,主要介绍树形dp和LRU 第一题: 给定一棵二叉树的头节点head,请返回最大搜索二叉子树的大小 二叉树的套路 统一处理逻辑:假设以每个节点为头的这棵树,他的最 ...
- HDU 4802 && HDU 4803 贪心,高精 && HDU 4804 轮廓线dp && HDU 4805 计算几何 && HDU 4811 (13南京区域赛现场赛 题目重演A,B,C,D,J)
A.GPA(HDU4802): 给你一些字符串对应的权重,求加权平均,如果是N,P不计入统计 GPA Time Limit: 2000/1000 MS (Java/Others) Memory ...
随机推荐
- 力扣554(java&python)-砖墙(中等)
题目: 你的面前有一堵矩形的.由 n 行砖块组成的砖墙.这些砖块高度相同(也就是一个单位高)但是宽度不同.每一行砖块的宽度之和相等. 你现在要画一条 自顶向下 的.穿过 最少 砖块的垂线.如果你画的线 ...
- 力扣128(java&python)-最长连续序列(中等)
题目: 给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度. 请你设计并实现时间复杂度为 O(n) 的算法解决此问题. 示例 1: 输入:nums = ...
- HarmonyOS NEXT应用开发之预加载so并读取RawFile文件
介绍 本示例主要介绍在TaskPool子线程中使用 dlopen 预加载 so 库并使用句柄调用库函数的方法,以及在Native中使用 pread 系统函数读取Rawfile文件的部分文本内容,并添加 ...
- DataFunTalk:阿里建设一站式实时数仓的经验分享
简介: 本文内容整理于阿里资深技术专家姜伟华在DataFunTalk上的演讲,为大家介绍阿里巴巴基于一站式实时数仓Hologres建设实时数仓的经验和解决方案. 导读:大数据计算正从规模化走向实时化, ...
- 云原生 DevOps,模型化应用交付能力很重要!
简介: DevOps 文化及其支撑其落地实践的自动化工具与平台能力在云原生架构渐为普及的背后,发挥了关键的价值. 撰稿:溪洋 云原生正在成为企业业务创新和解决规模化挑战的加速器. 云原生带来的变革绝 ...
- Python静态类型解析工具简介和实践
简介: Python是一门强类型的动态类型语言,开发者可以给对象动态指定类型,但类型不匹配的操作是不被允许的.动态类型帮助开发者写代码轻松愉快,然而,俗话说:动态一时爽,重构火葬场.动态类型也带来了许 ...
- Apache Hudi 在 B 站构建实时数据湖的实践
简介: B 站选择 Flink + Hudi 的数据湖技术方案,以及针对其做出的优化. 本文作者喻兆靖,介绍了为什么 B 站选择 Flink + Hudi 的数据湖技术方案,以及针对其做出的优化.主 ...
- [DOT] Polkadot-js 的官方资源
官网:https://polkadot.js.org/ 浏览器扩展(即钱包, 等同以太坊的MetaMask):https://polkadot.js.org/extension/ 钱包的作用方便你管理 ...
- 修改element,vant,mint等ui框架的样式
vant和mint移动端常见,引入单独的css文件,在main.js中引入下即可,直接在对应的vue文件的css通过控制台查看中修改也行,再不济加!important element: 1.vue框架 ...
- Django配置loguru来记录日志
第一步: 在settings.py文件中导入loguru模块并配置日志文件路径和格式等信息 from loguru import logger BASE_DIR = Path(__file__).re ...