CF1703G

链接:

Problem - 1703G - Codeforces

题目大意:

你有 \(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)

随机推荐

  1. 18-Docker资源限制

    背景 若容器使用的计算机资源不加限制,那么,可能会耗光整个计算机资源. 如代码里有bug,出现了死循环,且创建了很多线程. 在Docker中,可以使用Cgroup技术限制CPU.Block IO.RA ...

  2. Swoole v6 能否让 PHP 再次伟大?

    大家好,我是码农先森. 现状 传统的 PHP-FPM 也是多进程模型的的运行方式,但每个进程只能处理完当前请求,才能接收下一个请求.而且对于 PHP 脚本来说,只是接收请求和响应请求,并不参与网络通信 ...

  3. 【资料分享】Xilinx XCZU7EV工业核心板规格书(四核ARM Cortex-A53 + 双核ARM Cortex-R5 + FPGA,主频1.5GHz)

    1 核心板简介 创龙科技SOM-TLZU是一款基于Xilinx UltraScale+ MPSoC系列XCZU7EV高性能处理器设计的高端异构多核SoC工业核心板,处理器集成PS端(四核ARM Cor ...

  4. TI AM64x工业开发板硬件说明书(双核ARM Cortex-A53 + 单/四核Cortex-R5F + 单核Cortex-M4F,主频1GHz)

    前  言 本文主要介绍TL64x-EVM评估板硬件接口资源以及设计注意事项等内容. 创龙科技TL64x-EVM是一款基于TI Sitara系列AM64x双核ARM Cortex-A53 + 单/四核C ...

  5. podman+openresty+openssl,https双向认证demo测试

    前言 暂不讨论https原理,单论配置的话: 1. https单项认证 server: server.crt + server.key client: server_ca.crt 2. https双向 ...

  6. .NET周刊【7月第2期 2024-07-14】

    国内文章 开源GTKSystem.Windows.Forms框架让C# winform支持跨平台运行 https://www.cnblogs.com/easywebfactory/p/18289178 ...

  7. Java JVM——12. 垃圾回收理论概述

    1.前言 1.1 什么是垃圾? 在提到什么是垃圾之前,我们先看下面一张图: 从上图我们可以很明确的知道,Java 和 C++ 语言的区别,就在于垃圾收集技术和内存动态分配上,C++ 语言没有垃圾收集技 ...

  8. 解决“网页源代码编码形式为utf-8,但爬虫代码设置为decode('utf-8')仍出现汉字乱码”的问题

    为了用爬虫获取百度首页的源代码,检查了百度的源代码,显示编码格式为utf-8 但这样写代码,却失败了-.. (这里提示:不要直接复制百度的URL,应该是http,不是https!!!) # 获取百度首 ...

  9. 全网最好看的单细胞umap图绘制教程

    全网最好看的单细胞umap图绘制教程 作者按 大家或许都曾被Nature, Science上的单细胞umap图吸引过,不免心生崇拜.在这里,我们将介绍一种简单方便的顶刊级umap图可视化 全文字数|预 ...

  10. python中的字符串和列表

    name="1" name='1' name="""1""""" name='''1''' #都为正 ...