【杂题总汇】UVa-10618 Tango Tango Insurrection
【UVa-10618】 Tango Tango Insurrection
◇ 题目 +vjudge 链接+
(以下选自《算法竞赛入门经典》-刘汝佳,有删改)
<题目描述>
你想学着玩跳舞机。跳舞机的踏板上有4个箭头:上、下、下、右。当舞曲开始时,屏幕上会有一些箭头往上移动。当向上移动箭头与顶部的箭头模板重合时,你需要用脚踩一下踏板上的相同箭头。不需要踩箭头时,踩箭头并不会受到惩罚,但当需要踩箭头时,必须踩一下,哪怕已经有一只脚放在了该箭头上。很多舞曲的速度快,需要来回倒腾步子,所以最好写一个程序来帮助你选择一个轻松的踩踏方式,使得能量消耗最少。为了简单起见,将一个八分音符作为一个基本时间单位,每个时间单位要么需要踩一个箭头(不会同时需要踩两个箭头),要么什么都不需要踩。在任意时刻,你的左右脚应放在
不同的两个箭头上,且每个时间单位内只有一只脚能动(移动和/或踩箭头),不能跳跃。另外,你必须面朝前方以看到屏幕(即:你不能把左脚放到右箭头上,并且右脚放到左箭头上)。
当你执行一个动作(移动和/或踩)时,消耗的能量这样计算:
■ 如果这只脚上个时间单位没有任何动作,消耗1单位能量。
■ 如果这只脚上个时间单位没有移动,消耗3单位能量。
■ 如果这只脚上个时间单位移动到相邻箭头,消耗5单位能量。
■ 如果这只脚上个时间单位移动到相对箭头(上到下,或者左到右),消耗7单位能量。
正常情况下,你的左脚不能放到右箭头上(或者反之),但有一种情况例外:如果你的左脚在上箭头或者下箭头,你可以临时扭着身子用右脚踩左箭头,但是在你的右脚移出左箭头之前,你的左脚都不能移到另一个箭头上。类似地,右脚在上箭头或者下箭头时,你也可以临时用左脚踩右箭头。一开始,你的左脚在左箭头上,右脚在右箭头上。
<输入输出>
多组数据(不超过100组),每组数据包含一行——一个由'L','R','D','U'以及'.'组成的字符串(长度不超过70),第i个字符表示时间为i时需要踩下的键。
对于每组数据输出一个串,第i个字符表示时间为i时移动哪只脚,不移动输出'.'。
◇ 解析
由于本题影响答案的因素非常多,但是每一个因素的范围都不算大!所以我们选择DP,又因为本题不合法的条件也很多,我们选择记忆化搜索,能够简单地屏蔽所有不合法情况。
首先给四个方向编号:上下左右依次编为0~3,空('.')编为4。方便计算、表示。顺便就把原来的字符串转换成int数组dir[]。
影响答案的因素如下:
■ 已经完成的箭头个数,设为pos,作为第一维状态;也就是说现在需要匹配第pos个箭头;
■ 当前左右脚分别所在的箭头编号,分别设为l,r,作为第二、三维状态;
■ 上一步是哪只脚移动/踩下,记为 pre,左脚操作为1,右脚为2,若没有移动/踩下,pre=0,作为第四维;
那么状态就像这样:dp[pos][l][r][pre]表示已经完成了前pos个箭头,且左右脚分别在l,r的位置,上一步左/右脚完成了一个箭头。
很容易想到——初始的左右脚在左,右两键上,所以初始状态是 dp[0][2][3][0],即一个箭头都没有匹配,上一步没有操作。
而终止状态是当pos=n时(在这里数组从0开始)返回值为0。
在转移状态之前,我们还需要再处理几个函数,便于转移时值的计算:
■ 判断状态是否合法 bool Allowed(int l,int r,int fl,int fr)
参数表包含原来左右脚的位置l,r,以及下一步将要到达的位置fl,fr。
首先若左右脚都没有移动,则此时的状态是合法的,返回true。如果发现右脚没动(就是左脚动了)如果左脚将要到达的位置fl不是右脚的位置r,且右脚不在左箭头上(题目要求右脚只能临时在左箭头上,左脚也只能临时在右箭头上,所以如果右脚在左箭头上,是不能移动左脚的!),返回true。左脚与右脚判法相同。其余情况均为false。
■ 计算从当前位置到目标位置的花费 int Energy(int from,int to,inr last,int now)
参数表包含移动的脚的初始位置from和目标位置to,上一步进行操作的是哪只脚last,当前进行操作的是哪只脚now。
若当前进行操作的脚和上一次进行操作的脚不同,即last!=now时,根据题目第一条法则,我们可以判断这步操作花费为1。
若仅仅是没有移动,即from=to,则根据题目第二条法则,判断花费为3。
若移动的是相邻的两个箭头,判断花费为5。这里有一个小操作
【杂题总汇】UVa-10618 Tango Tango Insurrection的更多相关文章
- 【Uva 10618】Tango Tango Insurrection
[Link]: [Description] 玩跳舞机. 有一定的约束. 归纳起来就是以下三点 1.两只脚不能同时踩一个位置 2.如果左脚踩在了右键上,那么下一次移动的一定要是左脚 3.如果右脚踩在了左 ...
- 【杂题总汇】HDU-5215 Cycle
◆HDU-5215◆ Cycle 国庆节集训的第三天……讲图论,心情愉快……刷了一堆水题,不过也刷了一些有意思的题 +传送门+ HDU ▶ 题目 给出一个无向图(无自环,无重边),求该无向图中是否存在 ...
- 【杂题总汇】AGC027 C - ABland Yard
◆AGC027◆C - ABland Yard 终于知道为什么比赛的时候这么多人做C题了…… +传送门+(这是beta版的) ◇ 题目(自己翻译的,不要在意细节……) P.S. (@ 2018-9-2 ...
- 【杂题总汇】Codeforces-67A Partial Teacher
[Codeforces-67A]Partial Teacher 上周刷了一大堆小紫薯的动态规划的题
- 【杂题总汇】NOIP2013(洛谷P1967) 货车运输
[洛谷P1967] 货车运输 重做NOIP提高组ing... +传送门-洛谷P1967+ ◇ 题目(copy from 洛谷) 题目描述 A国有n座城市,编号从1到n,城市之间有m条双向道路.每一条道 ...
- 【杂题总汇】HDU多校赛第十场 Videos
[HDU2018多校赛第十场]Videos 最后一场比赛也结束了…… +HDU传送门+ ◇ 题目 <简要翻译> 有n个人以及m部电影,每个人都有一个快乐值.每场电影都有它的开始.结束时间和 ...
- 【杂题总汇】UVa-1336 Fixing the Great Wall
[UVA-1336]Fixing the Great Wall 一开始把题看错了……直接用的整数存储答案:之后用double存最后输出答案的时候取整就AC了
- 【杂题总汇】HDU2018多校赛第九场 Rikka with Nash Equilibrium
[HDU2018多校赛第九场]Rikka with Nash Equilibrium 又是靠这样一道题擦边恰好和第两百名分数一样~愉快
- 【杂题总汇】UVa-1627 Team them up!
[UVa-1627] Team them up! 借鉴了一下hahalidaxin的博客……了解了思路,但是莫名Wa了:最后再找了一篇dwtfukgv的博客才做出来
随机推荐
- 深入学习webpack(二)
深入学习webpack(二) 在深入学习webpack(一)中,我通过一个例子介绍了webpack的基本使用方法,下面将更为系统的学习webpack的基本概念,对于一门技术的掌握我认为系统化还是很重要 ...
- Zookeeper配置Kafka
Zookeeper安装 解压:tar -zxvf zookeeper-3.4.5-cdh5.7.0.tar.gz -C ~/app/ 配置到环境变量: vi ~/.bash_profile expor ...
- eclipse中使用自带的git提交项目
1.自带git插件进行配置我们的用户名和密码,即是自己github注册用户.windows--perferences--Team--Git--Configuration 2.eclipse生成SSH2 ...
- XStream xml转java对象2
<?xml version="1.0" encoding="UTF-8" ?> <person> <name>yunyun& ...
- MahApps.Metro控件更換微軟視窗主題
先來看一下微軟默認的視窗主題(左:Window)與MahApps.Metro的視窗主題(右:MetroWindow), Window MetroWindow MetroWindow似乎美觀多了 ...
- PHP函数库(core)
数组函数: array_change_key_case — 返回字符串键名全为小写或大写的数组 array_change_key_case() 将 input 数组中的所有键名改为全小写或大写.改变是 ...
- 自定义java代码快捷生成器使用与问题解决
对于很多的工作了有几年的开发人员来说,初期都是逐个单词语法的自己编写的.而一旦技术水平提高了到了一定的层次之后,在同时工作量的加大,要求我们必须加快提高工作效率.因此就可以利用必要的快捷开发手段和工具 ...
- Mysql数据库常用操作整理
0.说明 MySQL数据库是一个十分轻便的数据库管理系统,相比大型的数据库管理系统如Oracle,MySQL更拥有轻便.灵活.开发速度快的特色,更适用于中小型数据的存储与架构,被数以万计的网站采用.从 ...
- HDU 2121——Ice_cream’s world II——————【最小树形图、不定根】
Ice_cream’s world II Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64 ...
- 学习.NET好书推荐
我之前看过很多书,最近也买了些新书,无论已经看过的,还是正准备要看的,我都做了收藏.这些书涉及面较为广泛,都是平时看社区文章和技术杂志时收藏的,全部来自技术达人和架构师们的推荐,经过我的综合评估(销量 ...