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 ...
随机推荐
- 实现TextView 文字排版,分散两端对齐
參考:http://www.cnblogs.com/lcyty/p/3265335.html 方法一:使用HTML TextView textview=(TextView)findViewbyId(R ...
- EF 打造冲不掉的标签
应用场景: 在用EF的Datebase Fitst模式开发时,实体都是有T4文件根据数据库来生成,并且是每次保存都会重新生成,如果我们在有T4生成的实体类上加上验证标签,那么以保存就会丢失, 解决方案 ...
- Java字节流和字符流
file.txt文本中存储的内容: 好abc 1.字符流处理: package com.wjy.java; import java.io.FileInputStream; import java.io ...
- python import media模块
安装PyGraphics包 (python import media模块)有一段代码要import media,打开python自带的IDLE,输入: >>>import media ...
- cocos2d-x2.2.3和android平台环境的搭建
准备工作:1.我只是将cocos2d-x移植到android平台,所以默认为大家已经将android平台搭建完成了(eclipse和android SDK已经配置好,java环境搭建好) 2.下载an ...
- Oracle练习
--声明一个变量,并给它赋值 declare v_bonus number(8); begin select id*6 into v_bonus from A where Id=5; DBMS_OU ...
- poj 2992 Divisors 整数分解
设m=C(n,k)=n!/((n-k)!*k!) 问题:求m的因数的个数 将m分解质因数得到 p1有a1个 p2有a2个 .... 因为每一个质因数能够取0~ai个(所有取0就是1,所有取ai就是m) ...
- POJ2239_Selecting Courses(二分图最大匹配)
解题报告 http://blog.csdn.net/juncoder/article/details/38154699 题目传送门 题意: 每天有12节课.一周上7天,一门课在一周有多天上课. 求一周 ...
- 微软 Build 2016
微软 Build 2016年开发者大会发布多项功能升级 微软Build 2016开发者大会在美国旧金山的莫斯康展览中心开幕.本次大会对一些重点功能进行了完善.如手写笔支持技术Windows Ink.语 ...
- 从零开始学Xamarin.Forms(三) Android 制作启动画面
原文:从零开始学Xamarin.Forms(三) Android 制作启动画面 Xamarin.Forms 在启动的时候相当慢,必须添加一个启动界面,步骤如下: 1.将启动画面的图片命名为:s ...