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 ...
随机推荐
- hdu4151(二分)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4151 题意:找出比n小的没有重复数字的总个数,例如12以内11不符合,1~10都符合. 分析:直接利用 ...
- LDA主题模型学习笔记3.5:变分參数推导
如今来推导一下得到变分參数更新式的过程.这一部分是在论文的附录中,为避免陷入过多细节而影响总体理解.能够在刚開始学习LDA的时候先不关注求解细节.首先要把L写成关于γ,ϕ\gamma,\phi函数.依 ...
- DIV+CSS 入门
玩一小会儿前csdn什么时候,页面上的加qq而微博,我认为这是美好的.牛腩完成.运营商也开始了他真正的学习B/S之旅. 刚開始的时候,我不知道<div>是什么 也不清楚CSS用来干什么的, ...
- linux--关于shell的介绍
下面是最近学习shell的一些知识点总结***博客园-邦邦酱好*** 1.什么是shell(1)Shell将我们输入的指令与Kernel沟通,好让Kernel可以控刢硬件来正确无误地工作.(2)我们总 ...
- HTML4和HTML5之间10主要差异
HTML5恐怕要让部分网页工作者抓狂了,HTML5将採用标准的XML语法格式,这对代码的规范要求很高. HTML5是最新的HTML标准.尽管还在制定.但或迟或早,全部的web程序猿都会发现须要使用到这 ...
- 创建ASPState数据库
原文:创建ASPState数据库 在C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727下找到生成ASPState的sql:InstallSqlState.sql ...
- 获取编译学习笔记 (六)—— si、di,双环
疯狂暑期学习 汇编入门学习笔记 (六)-- si.di,双重循环 參考: <汇编语言> 王爽 第7章 1. and和or指令,与[bx+idata] and和or.就不多说了. [bx+ ...
- cocos2d-x 3.0游戏实例学习笔记 《跑酷》第一步--- 开始界面
说明:这里是平局:晓风残月前辈的博客.他是将泰然网的跑酷教程.用cocos2d-x 2.X 版本号重写的,眼下我正在学习cocos2d-X3.0 于是就用cocos2d-X 3.0重写,并做相关笔记 ...
- JavaEEB2C网上商城前端系统
问题的提出: 电子商务已经成为人们生活中不可或缺的组成部分,它提供了一种足不出户就可以挑选.购买.使用商品的方式.在众多点上网站中,综合类的B2C电商以其较高的可信度,丰富的商品类目,得到消费者的青睐 ...
- C#依据进程名称获取进程的句柄?
C#依据进程名称获取进程的句柄或C#怎样获取其它进程的句柄? 有时候标题名是动态变化的,所以不使用FindWindow方法! [StructLayout(LayoutKind.Sequential)] ...