CF1730G
CF1703G
链接:
题目大意:
你有 \(n\) 个箱子。第 \(i\) 个箱子中有 \(a_i\) 个硬币。你需要按照从箱子 \(1\) 号到箱子 \(n\) 号的顺序打开所有 \(n\) 个箱子。
你可以用以下两种钥匙之一打开一个箱子:
- 好钥匙:使用一次消耗 \(k\) 个硬币。
- 坏钥匙:使用时不消耗硬币,但会使所有未打开的箱子中的硬币数减半(包括正要打开的这个箱子)。硬币减半时向下取整。比如,用坏钥匙打开箱子 \(i\) 号时,\(a_i=a_i/2\),\(a_{i+1}=a_{i+1}/2\),\(......\),\(a_n=a_n/2\)。
所有钥匙用过一次就会断掉(别想着买一把好钥匙开完所有箱子了),好钥匙需要重复付费,坏钥匙效果会重复计算。
也就是说,你总共需要使用 \(n\) 把钥匙,每个箱子用一把。开始时,你没有硬币和钥匙,如果想用好钥匙,你就得去买。值得注意的是,在这个过程中你可以赊账买钥匙;例如,如果你只有 \(1\) 个硬币,你也可以购买价值 \(k=3\) 个硬币的好钥匙,你的余额会变成 \(-2\) 个硬币。
你需要求出开完所有箱子之后你能获得的最大硬币数量(显然大于等于 \(0\) )。
思路:
做到这种题,我们一般有两个思路:
贪心orDP
我们首先应该考虑DP,因为DP基于暴力,更容易想;
这道题,我们会有一个除2操作,这个次数任意,这肯定是辅助我们的一个工具去用这个除2获取更大利益
题目要求最大硬币数量,我们就设 f(i) = 在i的位置的最大值硬币数
补充维度,一个维度i肯定不行,我们的工具使用多少次,这也需要一个维度,容量应该是log(1e9)大约开30即可
所以dp方程:
\(
dp[i][j] = \begin{cases}
dp[i - 1][j-1] + a[i]/2^j ,&j >0 \\
dp[i - 1][0] + a[i] , &j = 0
\end{cases}
\)
代码:
const int N = 200005;
int n,k;
int a[N];
void solve(){
cin >> n >> k;
for(int i = 1;i<=n;i++) cin >> a[i];
int dp[n + 1][31];
int ma = 0;
memset(dp,0,sizeof dp);
for(int i = 1;i<=n;i++){
int p = a[i];
dp[i][0] = dp[i - 1][0] + a[i] - k;
ma=max(dp[i][0],ma);
for(int j = 1;j<=30;j++){
p/=2;
dp[i][j] = dp[i - 1][j - 1] + p;
ma=max(dp[i][j],ma);
}
}
cout << ma <<endl;
}
时间复杂度
O(30*n)
随机推荐
- LuBase 低代码开发框架介绍 - 可私有化部署
框架定位 面向开发人员,针对管理软件领域,对页面交互和通用功能进行高阶封装,逐步打造成平台型.生态型开发工具. 涓涓细流 ,汇聚成海,基于 PBC(组件式开发)开发理念,让功能模块的复用更简单. 让管 ...
- C#算法求解最佳组队问题
最佳组队问题 双人混合ACM程序设计竞赛即将开始,因为是双人混合赛,故每支队伍必须由1男1女组成.现在需要对n名男队员和n名女队员进行配对.由于不同队员之间的配合优势不一样,因此,如何组队成了大问题. ...
- 如何设置 QEMU 输出到控制台并使用 Shell 脚本自动化
如何设置 QEMU 输出到控制台并使用 Shell 脚本自动化 原文:How to Setup QEMU Output to Console and Automate Using Shell Scri ...
- 【论文阅读】RAL2022: Make it Dense: Self-Supervised Geometric Scan Completion of Sparse 3D LiDAR Scans in Large Outdoor Environments
0. 参考与前言 论文链接:https://ieeexplore.ieee.org/document/9812507 代码链接:https://github.com/PRBonn/make_it_de ...
- 【简单总结】SLAM 算法的 Benchmark 及相关数据集的结果对比
前言与参考 主要是copy一下总结,方便自己后续找方案特定使用,所有的出处均在标题处和原链接跳转,此处仅做各个benchmark收集使用,如果有原作者觉得侵权,请联系我 将全力配合相关内容和链接删除 ...
- PyTorch程序练习(一):PyTorch实现CIFAR-10多分类
一.准备数据 代码 import torchvision import torchvision.transforms as transforms from torch.utils.data impor ...
- SpringBoot 日志文件 logback-spring.xml
日志文件 将logback-spring.xml配置文件,放到:/src/main/resources中 <?xml version="1.0" encoding=" ...
- oeasy教您玩转vim - 77 - # 保留环境viminfo
保留环境viminfo 回忆组合键映射的细节 上次我们定义了session :mks 还可以加载会话session :source Session.vim vim -S Session.vim 基 ...
- useRoute 函数的详细介绍与使用示例
title: useRoute 函数的详细介绍与使用示例 date: 2024/7/27 updated: 2024/7/27 author: cmdragon excerpt: 摘要:本文介绍了Nu ...
- Nuxt.js 路由管理:useRouter 方法与路由中间件应用
title: Nuxt.js 路由管理:useRouter 方法与路由中间件应用 date: 2024/7/28 updated: 2024/7/28 author: cmdragon excerpt ...