CodeForces 1457C Bouncing Ball

题目大意:

给定一个 010101 串,有一个小球落到 ppp 点, 然后往前跳 kkk 步,一直跳下去直到跳出串的长度,小球只能落到 111 上面。你可以花费 xxx 秒把一个 000 改变成 111,或者花费 yyy 秒删除第一字符,然后其他字符往前移动一个单位。

问你最少需要多少秒才能保证小球可以跳出字符串。

思路:

看到这题就立马想到了 dpdpdp,然后就构思状态转移方程,一开始是构想 dp[i][0/1]dp[i][0/1]dp[i][0/1] 表示第 iii 个是 000 是 111 的最小秒数,后面仔细一想才发现,当状态为 000 的时候,小球不能在上面,后面的也不能从这转移,所以就是直接定义 dp[i]dp[i]dp[i] 表示小球落在 iii 上花费的最少时间。那么状态转移方程就是:
dp[i]={inf⁡if 1≤i<p(i−p)∗yif p≤i≤kmin((i−p)∗y,dp[i−k])if k<idp[i] = \begin{cases}\inf &\text{if } 1 \le i < p \\ (i-p)*y &\text{if } p \le i \le k \\ min((i-p)*y, dp[i-k]) &\text{if } k < i\end{cases}dp[i]=⎩⎪⎨⎪⎧​inf(i−p)∗ymin((i−p)∗y,dp[i−k])​if 1≤i<pif p≤i≤kif k<i​
小球落到 iii 上面,只有两种转移方式, 第一种就是把自己当 ppp 点,第二种就是前面弹过来的

这都是针对当前位是 111 的情况,如果不是 111 还要加上花费 xxx

小球只要落在 [n−k+1,n][n-k+1, n][n−k+1,n] 范围上,下一次就会直接跳出去,所以在这个区间取一个最小值即可

代码:

#include <bits/stdc++.h>
using namespace std;
#define me(a, b) memset(a, b, sizeof(a))
#define IOS() ios::sync_with_stdio(false), cin.tie(0)
#define endl '\n'typedef long long ll;
typedef pair<ll, ll> pll;
typedef pair<int, int> pii;
const int INF = 0x3f3f3f3f;
const int maxn = 2e5 + 5;
const ll mod = 1e9 + 7;ll dp[maxn];
char s[maxn];void solve()
{int n, p, k;cin >> n >> p >> k;cin >> s+1;int x, y;cin >> x >> y;for(int i = 1; i < p; ++i)dp[i] = dp[i] = INF;for(int i = p; i <= n; ++i) {int d = (s[i]=='0')?x:0;dp[i] = (i - p) * y;if(i > k)dp[i] = min(dp[i], dp[i-k]);dp[i] += d;}ll ans = INF;for(int i = n-k+1; i <= n; ++i)ans = min(ans, dp[i]);cout << ans << endl;
}int main()
{IOS();int T;cin >> T;while(T--) solve();return 0;
}

总结:

最近 dpdpdp 的题做的多,所以思路还是比较快。果然刷题还是有用的!!!

CodeForces 1457C Bouncing Ball相关推荐

  1. codeforces1457 C. Bouncing Ball

    写这个题写了1h,赛后无意看见jly神的代码只能膜拜%%% C. Bouncing Ball 预处理从1→k1\to k1→k开始跳需要添加多少个平台,预处从k+1→nk+1\to nk+1→n这些不 ...

  2. 1415C. Bouncing Ball

    C. Bouncing Ball:题目 很好的dp,1400分难见的题 #include <bits/stdc++.h> using namespace std; #define int ...

  3. 怎么在电脑上使用python-开始在 Windows 上使用 Python(初学者)

    开始在 Windows 上使用 Python(初学者)Get started using Python on Windows for beginners 07/19/2019 本文内容 下面是一个分步 ...

  4. 达拉草201771010105《面向对象程序设计(java)》第十六周学习总结

    达拉草201771010105<面向对象程序设计(java)>第十六周学习总结 第一部分:理论知识 1.程序与进程的概念: (1)程序是一段静态的代码,它是应用程序执行的蓝 本. (2)进 ...

  5. 3Delight NSI: A Streamable Render API

    3Delight是应用于高端电影级别渲染的软件渲染器,迄今为止已经参与了无数的电影制作,具体可以参见链接. 如果你对3Delight的印象就依然是RenderMan的替代品,那就显然已经和时代发展脱节 ...

  6. 201771010126 王燕《面向对象程序设计(Java)》第十六周学习总结

    实验十六  线程技术 实验时间 2017-12-8 1.实验目的与要求 (1) 掌握线程概念: ‐多线程 是进程执行过中产生的多条线索. 是进程执行过中产生的多条线索. 是进程执行过中产生的多条线索. ...

  7. [转]Windows Phone 7程序设计”完全版电子书可以免费下载了

    本文转自:http://www.cnblogs.com/salam/archive/2010/10/29/1864246.html 现在学习Windows Phone 7开发资料十分有限,除了MSDN ...

  8. javascript创建类_如何使用JavaScript创建吹气效果

    javascript创建类 Have you ever wondered how you can create a realistic air blowing effect with JavaScri ...

  9. 国际C语言混乱代码大赛结果公布

    国际C语言混乱代码大赛(IOCCC, The International Obfuscated C Code Contest)是一项国际编程赛事,从1984年开始,每年举办一次(1997年.1999年 ...

  10. 201771010109焦旭超《面向对象程序设计(java)》第十六周学习总结

    1.实验目的与要求 (1) 掌握线程概念: (2) 掌握线程创建的两种技术: (3) 理解和掌握线程的优先级属性及调度方法: (4) 掌握线程同步的概念及实现技术: 2.实验内容和步骤 实验1:测试程 ...

最新文章

  1. Leetcode每日必刷题库第3题,如何实现无重复字符的最长子串?
  2. 优化UGC流程,获得图文并茂游记so easy
  3. VC/VS开发问题集锦
  4. EF sqlite3报错 System.Data.Entity.Core.EntityException: 在提供程序连接上启动事务时出错。有关详细信息,请参阅内部异常。...
  5. RSA加密算法的简单案例
  6. JDK源码(16)-ClassLoader
  7. Java设计模式学习总结(3)——创建型模式之抽象工厂模式
  8. 【操作系统】第3章 进程管理与调度
  9. lucene.net helper类 【结合盘古分词进行搜索的小例子(分页功能)】
  10. Linux命令学习总结(超详细)
  11. 微信小程序内置在线客服
  12. 有2n个硬币,其中除一个略重外,其余2n-1个都一样重。
  13. GIF图像格式简介(87a和89a)(C语言生成GIF图像)
  14. 开源 iOS 项目分类索引大全
  15. 基于Java毕业设计爱心公益网站设计与制作源码+系统+mysql+lw文档+部署软件
  16. 想学Docker?我教你啊~
  17. python 声音基频f0_ASR中常用的语音特征之FBank和MFCC(原理 + Python实现)
  18. 2.13黑马培训日记
  19. AI如此多娇,引得猛男竞折腰
  20. Redis的奇葩问题

热门文章

  1. Wallpaper (18)
  2. LCD1602液晶屏
  3. 【HTML】网页开发的一些单词(关键词),新手必备。
  4. oracle erp市场份额,知名oracle ERP排名
  5. uniapp遮罩_uni-app 遮罩模板
  6. amd显卡风扇调节_amd显卡风扇速度设置linux版本
  7. 制作mac系统引导盘
  8. html中如何设计圆形图案,纯CSS绘制漂亮的圆形图案效果
  9. 数字化时代,如何做好用户体验与应用性能管理
  10. 高通烧录报ufs需要重新provision