Gym103371E. Goose Coins

news/2025/4/2 8:37:38/文章来源:https://www.cnblogs.com/Steven1013/p/18802455

Goose Coins

全是观察.

题意描述

鹅币王国使用 \(n\) 种鹅币作为国家货币。第 \(i\) 种鹅币的价值为 \(c_i\) 鹅元,重量为 \(w_i\)。对于所有的 \(i\ (1 \le i \le n-1)\),都满足 \(c_{i+1}\)\(c_i\) 的倍数,且 \(c_i < c_{i+1}\)

你在鹅市场购买了价值 \(p\) 鹅元的商品,希望使用恰好 \(k\) 枚鹅币来精确支付。每种类型的鹅币你都有无限多枚,因此无需担心硬币不足的问题。

请编写一个程序,找出满足条件的 \(k\) 枚硬币的最小和最大可能总重量。如果不存在这样的硬币组合,则输出 \(-1\)​。


思路

观察到如果 \(p \not\equiv 0 \pmod {c_1}\), 那么直接输出 \(-1\) 即可.

题目要求我们使用恰好 \(k\) 个鹅币组成价值 \(p\), 倘若我们先不考虑重量, 怎么使得使用的鹅币最少.

显然, 从小到大, 对于每一个鹅币 \(i\) 我们取 \(\displaystyle \lfloor \frac{p}{c_i} \rfloor\) 个, 然后 \(p := p \bmod c_i\), 这样取出来的鹅币数量一定是最少的.

将每个鹅币取得数量称为「系数」. 例如对于 \(p = 20\), 序列 \(c = [1, 2, 6]\), 那么系数序列 \(t = [0, 1, 3]\). 因为题目中给出 \(c_{i + 1}\)\(c_i\) 的倍数, 所以系数是可以下放的. 具体来说, 对于 \(1 \le j < i \le n\), 如果我们少取 \(k\)\(c_i\), 那么就可以多取 \(\displaystyle \frac{c_i}{c_j} \cdot k\)\(c_j\) 来补足.

现在考虑重量, 我们可以列出 \(\rm{DP}\) 方程

  • \(f_{i, j, k}\) 表示从后往前枚举到第 \(i\) 种鹅币, 还需要 \(j\) 个鹅币, 当前还需要 \(k\) 个第 \(i\) 种鹅币补足前面下放的最小 / 最大代价.

不选第 \(i\) 种鹅币.

\[f_{i, j, x} = f_{i + 1, j, k} \]

其中 \(\displaystyle x = \frac{c_{i + 1}}{c_i} \cdot k +t_i\), \(t\) 即为前面所述的系数序列.

选择第 \(i\) 种鹅币, 类似于背包

\[f_{i, j, k} = \min(f_{i, j, k}, f_{i, j + 1, k + 1} + w_i) \]

时间复杂度 \(\mathcal{O}(n k^2)\).

#include <iostream>
#include <cstring>using namespace std;#define int long longconstexpr int N = 62, M = 1001;int n, k, p, c[N], w[N], x[N], f[N][M][M], g[N][M][M];void init() {memset(f, 63, sizeof f);memset(g, 128, sizeof g);cin >> n >> k >> p;f[n + 1][k][0] = g[n + 1][k][0] = 0;for (int i = 1; i <= n; ++i) {cin >> c[i] >> w[i];}for (int i = n, t = p; i; t %= c[i--]) {x[i] = t / c[i];}
}void calculate() {if (p % c[1]) {puts("-1");return;}for (int i = n; i; --i) {for (int j = 0; j <= k; ++j) {for (int l = 0; l <= j; ++l) {int t = c[i + 1] / c[i] * l + x[i];if (t <= j) {f[i][j][t] = min(f[i][j][t], f[i + 1][j][l]);g[i][j][t] = max(g[i][j][t], g[i + 1][j][l]);}}}for (int j = k; j; --j) {for (int l = j; l; --l) {f[i][j - 1][l - 1] = min(f[i][j - 1][l - 1], f[i][j][l] + w[i]);g[i][j - 1][l - 1] = max(g[i][j - 1][l - 1], g[i][j][l] + w[i]);}}}if (g[1][0][0] < 0) {puts("-1");return;}cout << f[1][0][0] << ' ' << g[1][0][0] << '\n';
}void solve() {init();calculate();
}signed main() {solve();return 0;
}

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

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

相关文章

Windows11+OBS+视频号+麦克风设置直播操作流程

OBS+视频号直播操作流程 一、前期准备 1、可用于直播的电脑,我的是Win11系统 2、硬件设备(相机、采集卡、麦克风等) 3、软件(微信、OBS) 4、虚拟声卡 注:这个教程主要说一下声卡的配置,所以相机和采集卡之类的没有讲到 二、软件安装 微信和OBS这个都不会安装就别折腾了,所…

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…