“炫舞家“ST

时间限制:3000 ms  |  内存限制:65535 KB
难度:3
描述
ST是一个酷爱炫舞的玩家。TA很喜欢玩QQ炫舞,因此TA也爱屋及乌的喜欢玩跳舞机(Dance Dance Revolution,DDR)。但是TA每天还要努力的学习,因此TA希望每次都保存最多的体力来学习。

DDR的主要内容是用脚来踩踏板。踏板有4个方向的箭头,用1,2,3,4来代表,如下图所示。

游戏规则如下:
   每首歌曲有一个箭头序列,游戏者必须按照这个序列依次用某一只脚踩相应的踏板。在任何时候,两只脚都不能在同一个踏板上,但可以同时待在中心位置0(一开始游戏的时候,游戏者的双脚都在中心位置0处)。
   每一个时刻,TA必须移动而且只能移动TA的一只脚去踩相应的箭头,而另一只脚不许移动。这样,TA跳DDR的方式可以用一串数字L1L2………Ln来表示。
   其中体力消耗规则如下:
1、 从中心往任何一个箭头耗费2个单位体力;
2、 从任何一个箭头移动到相邻箭头耗费3个单位体力(1和3相对,2和4相对)耗费4个单位体力。
3、 留在原地在踩一下只需要1单位。
现在炫舞家ST很想学习但是又想玩DDR。因此,TA希望厉害的程序员你可以帮TA编写一个程序计算出TA因该怎样移动他的双脚(即,对于每个箭头,选一只脚去踩它),才能用最少的体力完成给定的舞曲。
例如,给出22140,总的体力耗费为2+1+2+3=8单位。

输入
输入文件将包括一系列的方向序列。每个方向序列包含一个数字序列。每个输入序列应该是数字1、2、3或4,每个代表四个方向 之一。一个值为0的方向序列表示方向的结束序列。和这个值应该被排除在方向序列(每个方向序列输入最多包含10000个数字)。输入文件结束为输入序列只 有单独的一个0。
输出
对于每个方向序列,输出最少单位的体力消耗值。结果应该是一个整数在单独的一行。任何多余的白空格或空行将不被接受。
样例输入
2 3 3 3 3 1 2 0
3 2 2 1 2 0
0
样例输出
12
9
AC代码:
 #include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
const int N=;
const int M=0X7ffffff;
int foot[N],cost[][],dp[N][][];
void fun()
{
for(int i=;i<;i++) for(int j=;j<;j++) cost[i][j]=M;//其他的花费,初始化为最大
cost[][]=cost[][]=cost[][]=cost[][]=;
cost[][]=cost[][]=cost[][]=cost[][]=cost[][]=cost[][]=cost[][]=cost[][]=;
cost[][]=cost[][]=cost[][]=cost[][]=;
cost[][]=cost[][]=cost[][]=cost[][]=;
}
int main()
{
int k,x,i,j,ans,y,n;
fun();
while()
{ ans=;
for( i=; i<N; i++)
{
cin>>x;
if(x==)
break;
else foot[i]=x;
}
n=i;
if(i==)
break;
else
{
for(i=;i<=n;i++)
for(j=;j<;j++)
for(k=;k<;k++)
dp[i][j][k]=M; //全部初始化为最大的值;
dp[][][]=; ans=M;
for(i=;i<n;i++) //表示的是步数;
{
for(j=;j<;j++) //没动的脚
{
if(j==foot[i]) continue; //当前位置上有了一个脚;
x=y=M;
for(k=;k<;k++) //左脚踩这个点;
{
if(k!=j || k+j==)
x=min(x,dp[i-][k][j]+cost[k][foot[i]]);
}
for(k=;k<;k++) //右脚踩这个点;
{
if(k!=j||k+j==)
y=min(y,dp[i-][j][k]+cost[k][foot[i]]);
}
dp[i][j][foot[i]]=dp[i][foot[i]][j]=min(x,y);
ans=min(ans,dp[n-][j][foot[i]]);//每次都寻找最小值
}
}
cout<<ans<<endl;
}
}
return ;
}

nyoj 740 “炫舞家“ST的更多相关文章

  1. nyist 740 “炫舞家“ST(动态规划)

    dp[i][j][k]:表示第i次踩踏后两脚的位置j,k 先固定一只脚的位置j,第i次踩踏后,状态为dp[i][j][a[i]]或者dp[i][a[i]][j],其中a[i]表示第i个输入的元素,则有 ...

  2. NYOJ 炫舞家st

    #include <iostream>#include <cstring>#include <algorithm>using namespace std; cons ...

  3. NYOJ 740 DP

    “炫舞家“ST 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 ST是一个酷爱炫舞的玩家.TA很喜欢玩QQ炫舞,因此TA也爱屋及乌的喜欢玩跳舞机(Dance Danc ...

  4. Java 炫舞按键功能 DancingPlay (整理)

    /** * Java 炫舞按键功能 DancingPlay (整理) * 2016-1-2 深圳 南山平山村 曾剑锋 * * 设计声明: * 1.本次设计是模仿QQ炫舞类游戏,当图标到红色的检测区域时 ...

  5. 微信游戏《全民炫舞》开发公司h3d2 engine和QQ炫舞2 布料系统技术介绍

    H3D公司开发的<全民炫舞>上线了. 蝉联IOS榜首很多天. 整理了一下过去公司游戏引擎开发的历史.有兴趣可以去看看 公司游戏引擎开发历史介绍: http://www.h3d.com.cn ...

  6. 内行看门道:看似“佛系”的《QQ炫舞手游》,背后的音频技术一点都不简单

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由腾讯游戏云发表于云+社区专栏 3月14日,腾讯旗下知名手游<QQ炫舞>正式上线各大应用商店,并迅速登上App Store免 ...

  7. NYOJ 741 &quot;数学家&quot;ST

    "数学家"ST 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描写叙述 ST是个非常特别的人类,不仅喜欢做一些不同平常的事,并且对于在无聊的时候怎样打发时 ...

  8. QQ炫舞官网选项卡效果

    这篇博文里需要注意的是当点击事件发生的时候,需要用循环,重置标题的classname和标题底部都设置成隐藏,当点击的时候在加上标题的active属性和显示属性 代码地址:https://github. ...

  9. 【转载】QQ炫舞手游自制谱子教程(星动模式)

    第一步:计算ET和BPM: 抄送原作者部落链接:https://buluo.qq.com/p/detail.html?bid=368006&pid=981862-1529828677& ...

随机推荐

  1. iOS中TextView显示HTML文本

    在界面布局中,我们会用到各种控件来显示我们想要的数据来进行展示:之前遇到过这样一个问题,我从后台的数据传过来是json,解析过后直接放入一个TextView来进行显示,但是没注意到这个数据里面是HTM ...

  2. MFC进度条刷新处理

    m_p.SetRange(0,1000); m_p.SetStep(1); for (int i=0;i<1001;i++) { m_p.SetPos(i); Sleep(10); MSG ms ...

  3. js中setinterval 的相关使用

    1.setinterval 方法 setinterval()是定时调用的函数,可按照指定的周期(以毫秒计)来调用函数或计算表达式. 2.创建一个setinterval 方法 setInterval(s ...

  4. alert和console的区别

    前端开发调试中用的最多的两个命令就是console和alert了吧,做了两年前端了,发现好多人连这两个命令的区别都还不清楚,今天正好没什么事情做,于是按照自己的理解随便说说.   alert: 1.会 ...

  5. Android疑难杂症之android:configChanges="orientation" 无效

    通常情况下,当“屏幕方向”变化时会销毁并重建当前Activity.而我们有时候并不希望重新创建Activity实例,然后就会在AndroidManifest.xml中配置Activity: <a ...

  6. requests.exceptions.SSLError: hostname '127.0.0.1' doesn't match None

    http://stackoverflow.com/questions/33429453/python-requests-ssl-hostname-doesnt-match-error http://w ...

  7. What is required for a successful backup of all files during hoi backup?

    There is a typo in the body of this question. It should be "Hot" instead of "hoi" ...

  8. 014敲代码将一个栈按升序排序,对这个栈是怎样实现的,你不应该做不论什么特殊的如果(keep it up)

    敲代码将一个栈按升序排序. 对这个栈是怎样实现的,你不应该做不论什么特殊的如果. 程序中能用到的栈操作有:push | pop |isEmpty 最easy想到的就是优先队列来做此题.easy实现. ...

  9. JMS之——ActiveMQ 高可用与负载均衡集群安装、配置(ZooKeeper + LevelDB + Static discovery)

    一.说明 从 ActiveMQ 5.9 开始, ActiveMQ 的集群实现方式取消了传统的 Master-Slave 方式,增加了基于ZooKeeper + LevelDB 的 Master-Sla ...

  10. Android常用传感器用法一览(2)

    在Android2.3 gingerbread系统中,google提供了11种传感器供应用层使用. #define SENSOR_TYPE_ACCELEROMETER       1 //加速度#de ...