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 ...
随机推荐
- 【System】I/O密集型和CPU密集型工作负载之间有什么区别
CPU密集型(CPU-bound) CPU密集型也叫计算密集型,指的是系统的硬盘.内存性能相对CPU要好很多,此时,系统运作大部分的状况是CPU Loading 100%,CPU要读/写I/O(硬盘/ ...
- 【ORA】ORA-27101快速处理方法
今天朋友的数据库出了问题,报错如下: 这个问题主要是是spfile和pfile文件不一致导致的, 生成一个pfile,完了用pfile启动数据库即可 SQL> create pfile '/ho ...
- M8 E147 不可能为条目*确立账户
今天用BAPI做发票校验, BAPI_INCOMINGINVOICE_CREATE这个函数使用都正常,可是突然就无法做发票检验了 报了个错误,"不可能为条目BOXT TR 确立账户" ...
- RocketMq消息 demo
参考 https://blog.csdn.net/asdf08442a/article/details/54882769 整理出来的测试 demo 1.produce 生产者 1 package co ...
- 二十七:XSS跨站之代码及httponly绕过
httponly:如果给某个 cookie 设置了 httpOnly 属性,则无法通过 JS 脚本 读取到该 cookie 的信息,但还Application 中手动修改 cookie,所以只是在一定 ...
- Amazon Selling Partner API 开发笔记
资料整理 1.sp-api介绍:https://developer.amazonservices.com/ 2.github文档:https://github.com/amzn/selling-par ...
- js 前端词典对象的属性和值读取
通常服务端返回比较奇葩的数据对象,不知道该怎么将这个对象转换为可用实体,想了很久,突发奇想想到了这么个方法. 需求是这样:企业有多个产品,产品有分为很几个种类.服务端有获取产品的接口,和单独获取产品种 ...
- Java并发包源码学习系列:阻塞队列实现之PriorityBlockingQueue源码解析
目录 PriorityBlockingQueue概述 类图结构及重要字段 什么是二叉堆 堆的基本操作 向上调整void up(int u) 向下调整void down(int u) 构造器 扩容方法t ...
- 4、剑指offer——从尾到头打印链表java实现
**题目描述** **输入一个链表,按链表从尾到头的顺序返回一个ArrayList.** 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M 思路: 1.如果链 ...
- mysql本地中127.0.0.1连接不上数据库怎么办
首先在本地使用Navicat for MySQL建立一个bai数据库.在dreamweaver中建立一个PHP格式的网页,方便链接测试.测试发du现,如果zhi无法使用localhost链接mysql ...