HDU 5350 MZLs munhaff function 题解

news/2024/10/8 14:04:12/文章来源:https://www.cnblogs.com/laijinyi/p/18403846

Statement

给长度为 \(n\) 的单调不上升序列 \(A\)\(B\) 为 \(A\) 的后缀和。你最开始在 \((n,1)\),要花费最小的代价跳到 \((1,1)\)。当你在 \((x,y)\) 时有两种选项:不花费任何代价跳到 \((x-1,y+1)\),或是花费 \(B_x\) 的代价跳到 \((x,\lceil\frac{y}{2}\rceil)\)

\(n,A_i\le 10^6\)

Solution

神仙题,不看标题猜不出一点,猜出来证不了一点

维护一个堆,开始让 \(A\) 中所有元素入堆,每次选堆中最小的两个数 \(a,b\),把 \(a+b\) 累加进答案,并把 \(a+b\) 加入堆。其实就是做一个最小哈夫曼树,也是最简单的“合并果子”。

证明:

首先

\[ f(i,j)=\begin{cases}0&(i,j)=(1,1)\\\min(f(i-1,j+1),f(i,\lceil\frac j2\rceil)+B_i)&i,j\in[1..n],(i,j)\not=(1,1)\\\inf&\text{otherwise}\end{cases} \]

\[ Ans=f(n,1) \]

在哈夫曼树中,每个叶节点会在它的所有祖先中贡献一次权值,那么在最小哈夫曼树中,深度较深的叶节点一定设置着权值较小的 \(A_i\)。给定的 \(A_i\) 已经预先排成降序,即 \(A_i\) 是第 \(i\) 大的叶节点。

考虑一个问题:所有 \(A\) 组成的哈夫曼树中代价最小是多少。代价定义为这棵树所有节点权值之和。

假装我们不会贪心,考虑 DP。

为了确定出一棵哈夫曼树的代价,我们只需确定每个叶子的深度,又因为 \(A_i\) 降序排列,故 \(A_i\) 的深度单调递增,根据整数划分数 trick 我们可以通过两种操作唯一地确定出深度序列,与每种代价一一对应:

  • \(A_i\) 放置在第一个空叶节点处。
  • 把所有空叶节点的深度 \(+1\),这时空叶节点数翻倍。

于是就可以做了!设 \(g(i,j)\) 表示,现在正在决策 \(A_i\) 的位置,现在共有 \(j\) 个空叶节点的最小代价。有两种可能:

  • 我们可以给 \(A_i\) 分配一个空叶节点,\(g(i,j)\to g(i+1,j-1)\)
  • 还可以给所有 \(j\) 个空叶节点分配两个儿子,空叶节点数翻倍,\(g(i,j)\to g(i,2j)\)

其中第二种操作会增加 \(\sum_{p\in[i..n]}A_p=B_i\) 的代价。初值为 \(g(1,1)=0\),答案为 \(g(n,1)\)

发现这个转移和上面 \(f\) 的转移一模一样!!!然后我们马上又会贪心了,于是做完了。

不过 \(j\) 不是偶数时 \(f(i,\lceil\frac{j}{2}\rceil)+B_i\) 会不会影响答案呢?

不会,因为此时总会多加一个 \(A_i\),一定不会比从 \(f(i-1,j+1)\) 来优。

怎么想到的啊 QAQQAQQAQQAQQAQ

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

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

相关文章

51nod 1274 最长递增路径

因为边权递增,按最小生成树的顺序 dp,设状态 \(dp[i]\) 为 \(i\) 点的最长路径长度,但是需要单调递增,所以考虑可以同时更新(先将原dp数组储存下来,再用新数组的值更新原 dp 数组),答案为 \(max(dp[i])\)。 #include<bits/stdc++.h> using namespace std; #defin…

读软件设计的要素05概念的特性

概念的特性1. 概念的特性 1.1. 专一性原则(specificity principle)认为概念与目的应该一一对应1.1.1. 专一性原则已被证明是概念设计中最有用的原则之一1.1.2. 一个概念最多只能满足一个目的1.2. 很少有没有目的的概念1.2.1. 如果本应隐藏的用户机制被暴露,可能会产生没有目的…

有意思、有趣的文字

苦难既然把我推到了悬崖的边缘,那么就让我在这悬崖边坐下来,顺便看看悬崖下的流岚雾霭,唱支歌给你听。       —— 史铁生《我与地坛》罗翔说:“珍惜你的低谷期,你会看到很多真相。时间能渡的都是愿意自渡的人,没有谁的人生一帆风顺,低谷期的苦难,就是为了积蓄力…

宝可梦gba改版教程/口袋妖怪gba改版教程

背景 心血来潮玩了一些改版,感觉不太人性化,于是想要去稍微学学。 过程 劝退 可以说是非常劝退,gba改版非常的不人性化,比如汇编语言asm,改版工具不支持中文之类的。没有成体系的教程 这是口袋资源吧的教程汇总,虽然看上去很详细,但是其实还是蛮零散的,而且由于贴吧的一…

414周赛第三题 - 3282. 到达数组末尾的最大得分

题目链接 3282. 到达数组末尾的最大得分思路 转换为“矩阵面积”;贪心解决题解链接 【一图秒懂】贪心(Python/Java/C++/Go)关键点时间复杂度 \(O(n)\)空间复杂度 \(O(1)\)代码实现: class Solution:def findMaximumScore(self, nums: List[int]) -> int:answer = maxv =…

使用 Microsoft.Extensions.ServiceDiscovery 进行服务发现并调用

简介 在现代微服务架构中,服务发现(Service Discovery)是一项关键功能。它允许微服务动态地找到彼此,而无需依赖硬编码的地址。以前如果你搜 .NET Service Discovery,大概率会搜到一大堆 Eureka,Consul 等的文章。现在微软为我们带来了一个官方的包:Microsoft.Extension…

第19篇 Protocol Buffers 编译器生成proto文件

1.下载 Protocol Buffers 编译器(protoc) 前往 Protocol Buffers GitHub Releases 页面。在 "Assets" 下找到适合您系统的压缩文件,通常为 protoc-{version}-win32.zip 或 protoc-{version}-win64.zip,其中 {version} 是版本号。2.解压缩 Protoc 编译器 创建一个…

Zlibrary镜像站官方网址的使用教程

Zlibrary的使用说明: 手机端 步骤一、以苹果浏览器为例,打开Z-library镜像站,搜索自己的图书,注册登录之后选择EPUB格式下载步骤二、手机打开下载的文件,即可正常阅读。电脑端 步骤一,如下图所示, 打开Zlibrary官网搜索电子书,点击自己需要的图书步骤二,如下图所示, 在…

Python实现批量提取视频

前言 最近在玩整nas,但是之前把视频和照片都上传到immich了,因为我可以直接在手机中上传照片,但是因为手机内存不够就把视频全删了的,现在只需要把视频下载下来上传到nas中就OK。但是现在问题是immich这东西不支持批量删选视频,只能全选照片和视频,而且一共有50个G的照片…

边缘计算平台:为客户端提供更快、更可靠的应用响应!

边缘计算平台是一种基于云计算技术的辅助计算系统。它可以在数据源的边缘(例如传感器、IoT设备等)进行数据的处理和分析,从而为客户端提供更快、更可靠的应用响应。与传统的云计算模式相比,边缘计算平台更加灵活和实时,它通过在分布式的边缘设备上进行计算,可以大大减少由…

1-9Java数组

Java 数组 数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同。 Java 语言中提供的数组是用来存储固定大小的同类型元素。 你可以声明一个数组变量,如 numbers[100] 来代替直接声明 100 个独立变量 number0,number1,....,numbe…

VR虚拟现实解决方案在电商行业中的7大优势

从电子商务的角度来看,虚拟现实可以通过多种方式为在线卖家带来好处。VR 可带来身临其境、富有创意且令人难忘的客户体验,可以极大地提高转化率。VR 可以通过更多方式使卖家受益。从电子商务的角度来看,虚拟现实可以通过多种方式为在线卖家带来好处。VR 可带来身临其境、富有…