CF1415-C. Bouncing Ball
CF1415-C. Bouncing Ball
题意:
在\(x\)轴上有\(n\)个点(从\(1\)到\(n\)),每个点都有一个值\(0\)或\(1\),\(0\)代表这个点不能走,\(1\)代表这个点可以走。你可以对这\(n\)个点执行一下两个操作:
1. 花费\(x\)让一个值为\(0\)的点变为\(1\)。
2. 花费\(y\)删除第一个点,其余的点的\(x\)轴坐标整体减一。
完成上面操作之后,你从点\(p\)出发,每次向前跳\(k\)个单位,即你能跳的位置有\(\{p,p+k,p+2k,...\}\) 直到跳出这\(n\)个点。若在跳出这\(n\)个点之前落在了一个值为\(0\)的点上,那么就失败了。
那么为了能成功的跳出这\(n\)个点,最小的花费是多少?
思路:
一般的思路,枚举前面一共移除多少块,然后从\(p\)点开始,每次往前跳\(k\)个单位,遇到\(0\)就在总花费中加上\(x\),最终取花费最小的作为答案,但是复杂度高达\(O(n^2/k)\)这是不能接受的。
我们可以先对这些数据进行预处理,利用DP从后往前算出花费,\(dp[i]\)表示的状态是:当\(i\)点作为\(p\)点,要跳出\(n\)个点的花费(这里不包括移除前面的点的花费),转移方程为\(f(x)=\left\{\begin{aligned}&dp[i]=a[i]==1?0:x,&i+k>n\\&dp[i]=dp[i+k]+a[i]==1?0:x,&i+k<=n\end{aligned}\right.\)
处理完这些数据就可以从\(p\)点开始枚举每一个点,那么从这点出发的总花费就是\((i-p)*y+dp[i]\),全部枚举完取最小的一个就是答案。
AC代码:
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
typedef long long ll;
const int Maxn = 100005;
const int INF = 0x3f3f3f3f;
int dp[Maxn], a[Maxn];
void solve() {
int n, p, k;
scanf("%d %d %d", &n, &p, &k);
for (int i = 1; i <= n; i++) {
scanf("%1d", a + i);
}
int x, y;
scanf("%d %d", &x, &y);
for (int i = n; i >= p; i--) {
if (i + k > n) {
dp[i] = a[i] == 1 ? 0 : x;
} else {
dp[i] = dp[i + k] + (a[i] == 1 ? 0 : x);
}
}
int ans = INF;
for (int i = p; i <= n; i++) {
ans = std::min(ans, (i - p) * y + dp[i]);
}
printf("%d\n", ans);
}
int main() {
int T;
scanf("%d", &T);
while (T--) {
solve();
}
return 0;
}
CF1415-C. Bouncing Ball的更多相关文章
- Codeforces Round #687 (Div. 2, based on Technocup 2021 Elimination Round 2) C. Bouncing Ball (后缀和,枚举)
题意:有一长度为\(n\)的平台,平台有的位置有木桩,可以使小球弹起来,小球必须从第\(p\)个位置开始,而且每次都会向右弹\(k\)个单位,然后有的位置是没有木桩的,你可以在这些的空的位置放一个木桩 ...
- 推荐25个帮助你提高技能的 CSS3 实战教程
使用 CSS,你能够以极高的效率和易用性创造出美丽的设计.而目前流行的 CSS3 技术更加强大,能够创造更多丰富的效果和功能,而不需要任何外部插件.今天,我为大家收集了25个很有用的 CSS 教程,技 ...
- 第14章 位图和位块传输_14.4 GDI位图对象(3)
14.4.10 非矩形的位图图像 (1)“掩码”位图——单色位图,要显示的像素对应的掩码置1,不显示置0(2)光栅操作(点这里,见此文分析) (3)MaskBlt函数 ①MaskBlt(hdcDest ...
- (转) Deep Reinforcement Learning: Pong from Pixels
Andrej Karpathy blog About Hacker's guide to Neural Networks Deep Reinforcement Learning: Pong from ...
- 自定义View(7)官方教程:自定义View(含onMeasure),自定义一个Layout(混合组件),重写一个现有组件
Custom Components In this document The Basic Approach Fully Customized Components Compound Controls ...
- [转]"Windows Phone 7程序设计”完全版电子书可以免费下载了
本文转自:http://www.cnblogs.com/salam/archive/2010/10/29/1864246.html 现在学习Windows Phone 7开发资料十分有限,除了MSDN ...
- canvas 乒乓球
<!DOCTYPE html> <html> <head> <title>Bouncing Ball With inputs</title> ...
- pygame写的弹力球
这是pygame写的弹力球 运行效果: ======================================================== 代码部分: ================= ...
- Samples for Parallel Programming with the .NET Framework
The .NET Framework 4 includes significant advancements for developers writing parallel and concurren ...
随机推荐
- 【Zabbix】配置zabbix agent向多个server发送数据
1.背景: server端: 172.16.59.197 ,172.16.59.98 agent 端: hostname:dba-test-hzj02 IP:172.16.59.98 2.方式: 配 ...
- java锁的对象引用
当访问共享的可变数据时,通常需要同步.一种避免使用同步的方式就是不共享数据. 如果数据仅在单线程内访问,就不需要同步,这种技术称为"线程封闭",它是实现线程安全性最简单方式之一. ...
- ctfhub技能树—文件上传—文件头检查
打开靶机 尝试上传一个php文件 抓包修改 放包 制作图片马 上传图片马,并修改文件类型为png 测试连接 查找flag 成功拿到flag
- DDIC_TYPELENG_INCONSISTENT错误的解决办法
当执行某个TCODE,例如SM66,出现类似如下的dump界面 大概意思就是说是ddic种的某个数据类型有问题,可能是数据结构,可能是数据元素或者是表等等 通过查阅资料了解到,对于note122290 ...
- 词嵌入之GloVe
什么是GloVe GloVe(Global Vectors for Word Representation)是一个基于全局词频统计(count-based & overall statisti ...
- 20V,24V转5V,20V,24V转3.3V降压芯片,IC介绍
常用的20V和24V转5V,3.3V的LDO稳压和DC-DC降压芯片: PW6206系列是一款高精度,高输入电压,低静态电流,高速,低压降线性稳压器具有高纹波抑制.输入电压高达40V,负载电流高达10 ...
- 一个关于ExecutorService shutdownNow时很奇怪的现象
我们知道很多类库中的阻塞方法在抛出InterruptedException后会清除线程的中断状态(例如 sleep. 阻塞队列的take),但是今天却发现了一个特别奇怪的现象,先给出代码: publi ...
- 指令集架构 x86-64 x86架构的64位拓展,向后兼容于16位及32位的x86架构
https://zh.wikipedia.org/wiki/X86 x86泛指一系列英特尔公司用于开发处理器的指令集架构,这类处理器最早为1978年面市的"Intel 8086"C ...
- 使用jiffies的时间比较函数time_after、time_before
1. jiffies简介 首先,操作系统有个系统专用定时器(system timer),俗称滴答定时器,或者系统心跳. 全局变量jiffies取值为自操作系统启动以来的时钟滴答的数目,在头文件< ...
- Java多线程--两种实现方式
进程概述: 在这之前,有必要了解一下什么是进程? 在一个操作系统中,每个独立的执行的程序都可称为一个进程,也就是"正在运行的程序".如图所示: 线程概述: 如上所述,每个运行的程序 ...