UVA 1291 Dance Dance Revolution(DP)
意甲冠军:跳舞机有一个上5积分,分别central, top, bottom, left, right分,区区足站立还是需要1点物理,从一个单纯的脚central点上须要2点体力,从一个点上移动到相邻的点上须要3点体力,从一个点移动到对面的点上须要4点体力,初始的时候双脚都在central点上,给出一系列的舞步,求最少须要多少的体力来完毕.
思路:设dp[k][i][j]为在第k个舞步的时候,左右脚分别在i,j点上的最少体力.
转移的时候仅仅需考虑从上一个舞步的左脚还是右脚到当前舞步,详细就看程序里吧, 用了滚动数组.
#include <cstdio>
#include <algorithm>
#include <memory.h>
using namespace std;
const int MAX = 5;
int dp[2][MAX][MAX]; inline bool is_opposite(int i, int j){
return i == 1 && j == 3 || i == 2 && j == 4;
}
inline int consumption(int i, int j){
if(i == j)return 1;
else if(i == 0)return 2;
else if(is_opposite(i, j) || is_opposite(j, i))return 4;
else return 3;
}
int main(int argc, char const *argv[]){
int side;
while(scanf("%d", &side) && side){
int f = 1, ans = 0x20202020; memset(dp, 0x20, sizeof(dp));
dp[0][0][0] = 0;
do{
//move the left foot
for(int i = 0; i <= 4; ++i){
for(int j = 0; j <= 4; ++j){
if(side != j){
dp[f][side][j] = min(dp[f][side][j], dp[f ^ 1][i][j] + consumption(i, side));
}
}
}
//move the right foot
for(int i = 0; i <= 4; ++i){
for(int j = 0; j <= 4; ++j){
if(side != i){
dp[f][i][side] = min(dp[f][i][side], dp[f ^ 1][i][j] + consumption(j, side));
}
}
}
scanf("%d", &side);
f ^= 1;
memset(dp[f], 0x20, sizeof(dp[f]));
}while(side); printf("%d\n", *min_element(&dp[f ^ 1][0][0], &dp[f ^ 1][4][4]));
}
return 0;
}
版权声明:本文博主原创文章,博客,未经同意不得转载。
UVA 1291 Dance Dance Revolution(DP)的更多相关文章
- 递推DP UVA 1291 Dance Dance Revolution
题目传送门 题意:给一串跳舞的动作,至少一只脚落到指定的位置,不同的走法有不同的体力消耗,问最小体力消费多少分析:dp[i][j][k] 表示前i个动作,当前状态(j, k)的最小消费,状态转移方程: ...
- UVA 1291 十四 Dance Dance Revolution
Dance Dance Revolution Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Su ...
- [LA] 2031 Dance Dance Revolution
Dance Dance Revolution Time limit: 3.000 seconds Mr. White, a fat man, now is crazy about a game nam ...
- Dance Dance Revolution
今天我们来讲 Dance Dance Revolution这题 本题原网址 注意本题为多组输入输出,直到输入单个零而止(题面有点小问题) 很明显,此题为一道动态规划题(请不要妄想用贪心算法过这题,尽管 ...
- UVA.10066 The Twin Towers (DP LCS)
UVA.10066 The Twin Towers (DP LCS) 题意分析 有2座塔,分别由不同长度的石块组成.现在要求移走一些石块,使得这2座塔的高度相同,求高度最大是多少. 问题的实质可以转化 ...
- UVA 10003 Cutting Sticks 区间DP+记忆化搜索
UVA 10003 Cutting Sticks+区间DP 纵有疾风起 题目大意 有一个长为L的木棍,木棍中间有n个切点.每次切割的费用为当前木棍的长度.求切割木棍的最小费用 输入输出 第一行是木棍的 ...
- UVALive - 2031 Dance Dance Revolution 三维dp
题目大意:有一个胖子在玩跳舞机.刚開始的位置在(0,0).跳舞机有四个方向键,上左下右分别相应1,2,3,4.如今有下面规则 1.假设从0位置移动到随意四个位置,消耗能量2 2.假设从非0位置跳到相邻 ...
- UVA1291----Dance Dance Revolution----3维DP
本文出自:http://blog.csdn.net/dr5459 题目地址: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&a ...
- 2000 Asia shanghai Dance Dance Revolution
思路:dp[i][x][y]表示第i个序列中,右脚在x位置,左脚在y位置时,其最小花费. 那么dp[i][x][y]=min(dp[i-1][a[i]][y]+cost[a[i]][x],dp[i-1 ...
随机推荐
- poj1860(spfa判正环)
题目连接:http://poj.org/problem?id=1860 题意:有多种从a到b的汇率,在你汇钱的过程中还需要支付手续费,那么你所得的钱是 money=(nowmoney-手续费)*rat ...
- 将svnkit转成dlls时的问题
未处理 System.TypeInitializationException Message="“org.tmatesoft.svn.core.internal.wc.DefaultSVNO ...
- 解决方式:QSqlDatabase: an instance of QCoreApplication is required for loading driver plugins
在用QSqlDatabase时遇到报错QSqlDatabase: an instance of QCoreApplication is required for loading driver plug ...
- Win7+ubuntu kylin+CentOS 6.5三系统安装图文教程
Win7+ubuntu kylin+CentOS 6.5三系统安装图文教程 引言:原本机子上已经装好了win7+Ubuntu Kylin 由win7引导,而不是Ubuntu的grub引导的双系统(安装 ...
- 怎样从host之外连接到docker container
启动docker的时候的指令使用 sudo docker -H tcp://0.0.0.0:4243 -H unix:///var/run/docker.sock -d & 这样就能使dock ...
- 泛泰A850 (高通8064+720p)刷4.4专用中文recovery TWRP2.7.1.3版
欢迎关注泛泰非盈利专业第三方开发团队 VegaDevTeam (本team 由 syhost suky zhaochengw(z大) xuefy(大星星) tenfar(R大师) loogeo cr ...
- WIFI实时监控追踪小车演示视频——安卓端、小车
文章由@超人爱因斯坦出品,转载请注明出处. 文章链接: http://hpw123.net/a/qingsongyike/yingyinqu/2014/1019/59 ...
- sscanf,sscanf_s及其相关使用方法
#include<stdio.h> 定义函数 int sscanf (const char *str,const char * format,........); 函数说明 sscan ...
- java它们的定义ArrayList序列, 大神跳跃
一个list有两种类型的对象,今天有需求必须责令不同的约会对象,这里是代码 /** *@author xh1991101@163.com */ List<Message> messages ...
- Windows Phone开发(32):路径之PathGeometry
原文:Windows Phone开发(32):路径之PathGeometry 说起路径这玩意儿,其实说的就是Path类,它藏在命名空间System.Windows.Shapes下,应该好找,它有一个很 ...