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 ...
随机推荐
- kubernets与API服务器进行交互
一 为何需要与kubernets集群的API服务器进行交互 1.1 kubernets提供了一种downapi的资源可以将pod的元数据渲染成环境变量或者downward卷的形式挂载到容器的文件系 ...
- 【Android】报错 Please ensure Hyper-V is disabled in Windows Features, or refer to the Intel HAXM 的解决方案
参考文章 实测华为锐龙本(adm yes)安装Android avd虚拟机教程 环境 Android Studio 3.6; Windows 1909; AMD Ryzen 4800U with Ra ...
- 部署自动初始化Schema的数据库
我们使用容器的方式部署数据库组件,特别是企业有大量的项目开发业务的,部署的开发.测试数据库组件较多时.经常会遇到以下问题: 业务需要使用数据库,但部署完数据库后,需要在数据库中执行创建schema的操 ...
- 计算机网络安全 —— 非对称加密算法 RSA 和数字签名(二)
一.非对称加密算法基本概念 在对称密钥系统中,两个参与者要共享同一个秘密密钥.但怎样才能做到这一点呢?一种是事先约定,另一种是用信使来传送.在高度自动化的大型计算机网络中,用信使来传送密钥显然是不合适 ...
- elasticsearch从开始到永久
0.学习目标 独立安装Elasticsearch 会使用Rest的API操作索引 会使用Rest的API查询数据 会使用Rest的API聚合数据 掌握Spring Data Elasticsearch ...
- 一文打尽 Linux/Windows端口复用实战
出品|MS08067实验室(www.ms08067.com) 本文作者:Spark(Ms08067内网安全小组成员) 定义:端口复用是指不同的应用程序使用相同端口进行通讯. 场景:内网渗透中,搭建隧道 ...
- 端口被占用通过域名的处理 把www.domain.com均衡到本机不同的端口 反向代理 隐藏端口 Nginx做非80端口转发 搭建nginx反向代理用做内网域名转发 location 规则
负载均衡-Nginx中文文档 http://www.nginx.cn/doc/example/loadbanlance.html 负载均衡 一个简单的负载均衡的示例,把www.domain.com均衡 ...
- 大型面试现场:一条update sql执行都经历什么?
导读 Hi,大家好!我是白日梦!本文是MySQL专题的第 24 篇. 今天我要跟你分享的MySQL话题是:"从一条update sql执行都经历什么开始,发散开一系列的问题,看看你能抗到第几 ...
- Web漏洞扫描-AWVS
Web漏洞扫描-AWVS 一.AWVS概述 二.功能以及特点 三.AWVS界面 四.AWVS使用 相关优质博文: CSDN:帽子不够白:WEB渗透测试之三大漏扫神器 一.AWVS概述 Acunetix ...
- Linux-CentOS7环境MySQL安装配置
Linux-CentOS7环境MySQL安装配置 1. 安装准备 (1)检查MySQL是否已安装 (2)如果有的话,就全部卸载 2. 安装libaio (1)检索相关信息: (2)安装依赖包: 3. ...