Codeforces Round 522 Div2 C. Playing Piano

栏目: 编程工具 · 发布时间: 7年前

内容简介:地址: http://codeforces.com/contest/1079/problem/C题意:输入钢琴的曲谱,每个调可以使用一个手指头按一下,手指头编号1到5。

一、题意

地址: http://codeforces.com/contest/1079/problem/C

Codeforces Round 522 Div2 C. Playing Piano

题意:输入钢琴的曲谱,每个调可以使用一个手指头按一下,手指头编号1到5。

要求1:相邻的两个调,调更高时,需要使用编号更高的指头。

要求2:相邻的两个调,相等时,两个指头需要不同。 求输出一直弹奏的指法。

二、分析

由于每个位置顶多有5个指法,我们可以计算出每个位置的5个指法是否可行。

从左右到看,一个位置的某个指法是否可行,可以由上个位置推导出来。

所以这是典型的动态规划题,而且是初级 DP 题。

展开来看,依旧是从左到右。

第一个位置任何一个手指都可以按。

第二个位置需要根据第一个调的值以及指法来计算。

具体计算方法是第二个位置的某个指法,我们循环上个位置的所有指法,判断上个位置指法是否合法,以及能否满足题目的两个要求。满足了当前指法就是合法的。

由于题意要求输出其中一个路径,合法的时候我们可以保存这个合法指法是从哪个指法推导过来的。

这样从左到右就可以计算出最后一个位置的所有合法指法。

如果最后一个位置存在合法指法,逆向推导即可计算出合法路径。

默认情况下,复杂度是 O(n * 5 * 5)

在从左到有推导的时候,我们可以得出这样一个结论: 如果b是大于上个位置的合法指法,那么大于b的都是合法的。 因为最大的指法大于b,所以最大的指法肯定也是合法的。

因此,我们可以根据最大的指法快速判断当前指法是不是合法的。

例如,对于第 2 个位置 ,合法指法是 1,2,3

第 3 个位置小于第 2 个位置,我们可以快速得到第3个位置的 1 是合法指法。

因为 1 可以从 23 推导得到。更简单点, 1 可以从最大合法值 3 推导得到, 2 也可以从最大合法值 3 推导得到 。

由此,我们可以维护一个上个位置的最大合法值和最小合法值(单点最值,不是区间),从而少一次循环,复杂度降为 O(n * 5)

Codeforces Round 522 Div2 C. Playing Piano

本文首发于公众号:天空的代码世界,微信号:tiankonguse-code。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

大思维:集体智慧如何改变我们的世界

大思维:集体智慧如何改变我们的世界

杰夫·摩根 / 郭莉玲、尹玮琦、徐强 / 中信出版集团股份有限公司 / 2018-8-1 / CNY 65.00

智能时代,我们如何与机器互联,利用技术来让我们变得更聪明?为什么智能技术不会自动导致智能结果呢?线上线下群体如何协作?社会、政府或管理系统如何解决复杂的问题?本书从哲学、计算机科学和生物学等领域收集见解,揭示了如何引导组织和社会充分利用人脑和数字技术进行大规模思考,从而提高整个集体的智力水平,以解决我们时代的巨大挑战。是英国社会创新之父的洞见之作,解析企业、群体、社会如何明智决策、协作进化。一起来看看 《大思维:集体智慧如何改变我们的世界》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具