[XXII Open Cup, Korea GP] Goose Coins

news/2025/4/2 6:45:39/文章来源:https://www.cnblogs.com/YzaCsp/p/18802417

前言

参数一多脑子就睡觉

阿达西捧油, 你滴脑子浆糊一样的时候, 不妨听一下雄鹰一样男人的话

思路

首先分析问题, 发现这个背包看起来比较的恐怖, 于是我赛时弃掉了背包做法, 并且死活找不到 \(c_i \mid c_{i + 1}\) 怎么用

赛后发现其实分析问题做的还行, 找性质就很不对了
首先是这种倍数性质有一种不定进制数的感觉, 后面我就在这个基础上处理

首先抛开恰好 \(k\) 个不谈, 只考虑 \(p\) 的约束
因为可行性 \(\rm{dp}\) 注定不能解决, 我们考虑贪心

不难发现由于不定进制数的性质, 我们可以贪心的把 \(p\) 放到高位, 这样一定能保证最小的硬币数, 并且如果有合法解, 通过这种方法也一定能构造出来
具体解释一下, 任何一种合法解在收起来之后必定是这样的, 逆向来讲就是把可以把这样的放置方法拆分成任意合法解
下面称这种贪心方法构造的序列为「起始序列」, 各位记为 \(s_i\)

然后考虑 \(k\) 的约束, 本质上是找到上面的「起始序列」的一个最优拆分 \(h\), 使得恰好拆成 \(k\) 个, 并且要求 \(\sum h_iw_i\) 取到最值

因为 \(n, k\) 相比于 \(p, w_i\) 小很多, 于是不难发现 \(k\) 的约束可以状态维护, 但是 \(w_i\) 必须和 \(p\) 一样找点性质
什么时候 \(\sum h_iw_i\) 取到最值, 发现并不好直接处理, 但是发现一个关键性质

倘若我们取前 \(r\) 类硬币的时候已经使得 \(\sum h_iw_i\) 取到最值, 那么在这个基础上一定得到后面的最值

于是可以把它丢进 \(\rm{dp}\) 里维护
具体设计状态考虑 \(f_{i, j, l}\) 表示考虑前 \(i\) 类硬币, 已经拆成了 \(j\) 个硬币, \(c_i\) 硬币还有 \(l\) 个的最值 \(\sum h_iw_i\) 可以简单做到 \(\mathcal{O} (n k^2)\)
具体的, 考虑枚举当前到底拆了多少 \(c_i\)\(c_{i - 1}\), 然后简单后缀 \(\min\) 维护即可

更具体的官方题解
  1. 状态定义D[i,j,l]D[i,j,l] 表示处理到第 ii 种硬币时,总硬币数为 jj,且当前剩余 llii-面额硬币的最小重量。
  2. 状态转移:拆分 mmii-面额硬币为 bi=ci/ci1b_i = c_i/c_{i-1}i1i-1-面额硬币:
    D[i1,j+(bi1)m,ai1+bim]=minmlkD[i,j,l]+(biwi1wi)m.D[i-1, j + (b_i - 1)m, a_{i-1} + b_i m] = \min_{m \leq l \leq k} D[i,j,l] + (b_i w_{i-1} - w_i)m.
  3. 复杂度:状态数 O(nk2)O(nk^2),总时间 O(nk2)O(nk^2)

输出结果

• 最小重量为 minlD[1,k,l]\min_l D[1,k,l],若无解则输出 -1
• 最大重量可通过符号翻转后相同算法求得。

总结

  • 考察状态设计
    • 不能用状态维护的问题
      • 固定序列
      • 贪心
        • 拥有贪心性质的状物, 可以丢进 \(\rm{dp}\) 里维护\((\)但是不是状态\()\)
          • 前后不相关的序列取数
    • 能用状态维护的
      • 直接用状态维护并和上面结合

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

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

相关文章

2025年天梯赛补题记录——整数的持续性

为什么没写出来:哈哈,看到400ms就不想写了,被前面一个题目卡了两次时间心态崩了,头脑发昏以为直接算过去会超时(能说那个时候快困死了脑袋很不灵光吗,给自己的无能找借口嘻嘻) 优化思路: 1.记忆化缓存:一想便知道每个数的分解都算一次很费时间,可以联想到记忆化缓存—…

《上古卷轴3:晨风》——存档技能数据修改

《上古卷轴3:晨风》由于其mod广泛开发,使得游戏的生命力非常强大,至今仍受广大RPG迷的喜爱!但晨风的技能数据如果用CE去修改,则是无用的。这里提供了技能数据的存档顺序,因此可以利用hex editor类的软件直接修改存档CE修改失效 《上古卷轴3:晨风》由于其mod广泛开发,使…

记录一次Armbian安装宝塔面板遇到ModuleNotFoundError: No module named _sqlite3的问题

如果在用Armbian安装宝塔面板的时候遇到ModuleNotFoundError: No module named _sqlite3报错,并且无法进入web面板界面,可以尝试以下操作。报错界面展示:步骤1:更换或添加Ubuntu软件源地址到/etc/apt/source.list.d文件夹的文件中 例如:将下面的地址添加到/etc/apt/source…

Cesium中glb模型颜色暗淡解决

问题: 3dmax导出fbx,此fbx文件导入blender中,再由blender导出成glb模型,该glb模型放入cesium中贴图颜色颜色暗沉无光,试了各种办法(泛光、时差、多光源、唯一光)效果均不明显。 原因: 发现,转格式过程中不知道哪一环出错,会导致模型材质一个叫metallicFactor的属性格…

工业相机与采集卡配套方案:构建高性能机器视觉系统的核心要素

机器视觉技术作为人工智能和智能制造的关键组成部分,正日益广泛地应用于工业自动化、质量检测、机器人引导等领域。而一套高性能的机器视觉系统,离不开工业相机和采集卡的完美配合。工业相机负责图像的采集,采集卡则负责将相机采集到的图像数据传输到计算机进行分析和处理。…

在Linux环境下搭建Dify

在Linux环境下搭建Dify Dify的概述 Dify是一款开源的大语言模型(LLM)应用开发平台。它融合了后端即服务(Backend as Service)和LLMOps的理念,使开发者可以快速搭建生成级的生成式AI应用。即使你是非技术人员,也能参与到AI应用的定义和数据运营过程中。由于Dify内置了构建LLM应…

Linux密钥认证及Windows使用密钥连接Linux

概述 Linux中我们要连接主机,输入用户名密码然后连接,我们发现每次连接都要输入密码,对于一些批量操作不方便 我们需要一种新的认证方式,每次连接不需要输入密码,这个方法就叫密钥认证 密钥认证原理原理详解:使用ssh-keygen命令生成私钥和公钥。 使用ssh-copy-id命令将公…

3.31 等价关系与划分

1 等价关系与划分 1.1 等价关系 若R是自反的,对称的和传递的,则称R为A上的等价关系(和恒等关系、全域关系不同) *关系内部的元素是等价的 *R^2={(a,b)}即第一分量到第二分量有一个长度为2的路径 所以R^2(长度为2的路径)∈R(长度为1的路径),即可判断R具有传递性 1.2 等…

wrp golang编译打包

wrp wrp开启一个了一个服务器代理,将Web内容转换为适合特定设备或平台的格式,以提高内容的兼容性和性能。 网页将在wrp服务器进行渲染,返回给请求服务器以降低请求服务器的压力。 https://github.com/tenox7/wrp/releases/tag/4.8.2 更改源代码 wrp项目默认代理地址为google…

CC1链分析

CC1链分析 因为分析的第一条cc链,所以每个细节都处理到了,之后的cc链就不会赘述很多了,毕竟基本都是大同小异,好好认真分析这第一条链,后面也就掌握了十之七八 环境: CC1链在JDK 8u71及之后的版本中被修复,因此需要使用JDK 8u71之前的版本 使用的JDK环境为JDK8u66,JDK下…