UVALive 2031 Dance Dance Revolution

题解:

简单DP

dp[i][j][k] 表示第i步双脚在位置j和位置k的位置

然后根据题意推一下转移方程就行了

代码:

#include<bits/stdc++.h>
using namespace std;
#define pb push_back
#define mp make_pair
#define se second
#define fs first
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define pii pair<int,int>
#define ll long long

const int INF = 1e9;
const int maxn = 50050;

vector< int > v;
int x;
int dp[ maxn ][ 5 ][ 5 ];

int step_num( int s, int e )
{
    if( s == 0 ) return 2;
    if( s == 1 )
    {
        if( e == 1 ) return 1;
        if( e == 2 || e == 4 ) return 3;
        if( e == 3 ) return 4;
    }
    if( s == 2 )
    {
        if( e == 2 ) return 1;
        if( e == 1 || e == 3 ) return 3;
        if( e == 4 ) return 4;
    }
    if( s == 3 )
    {
        if( e == 3 ) return 1;
        if( e == 2 || e == 4 ) return 3;
        if( e == 1 ) return 4;
    }
    if( s == 4 )
    {
        if( e == 4 ) return 1;
        if( e == 1 || e == 3 ) return 3;
        if( e == 2 ) return 4;
    }
}

int main()
{
    while( ~scanf( "%d", &x ) && x )
    {
        v.clear();
        v.push_back( x );
        while( scanf( "%d", &x ) && x ) v.push_back( x );
        for( int i = 0; i < 5; i ++ )
        for( int j = 0; j < 5; j ++ )
        for( int k = 0; k < 50000; k ++ ) dp[ k ][ i ][ j ] = INF;
        int n = v.size(), goal = INF;
        dp[ 1 ][ 0 ][ v[ 0 ] ] = dp[ 1 ][ v[ 0 ] ][ 0 ] = 2;
        for( int i = 2; i <= n; i ++ )
        {
            int now = v[ i - 1 ];
            for( int j = 0; j < 5; j ++ )
            for( int k = 0; k < 5; k ++ )
            {
                if( j == k ) continue;
                if( j != now ) dp[ i ][ j ][ now ] = min( dp[ i ][ j ][ now ], dp[ i - 1 ][ j ][ k ] + step_num( k, now ) );
                if( k != now ) dp[ i ][ now ][ k ] = min( dp[ i ][ now ][ k ], dp[ i - 1 ][ j ][ k ] + step_num( j, now ) );
                if( i == n )
                {
                    goal = min( goal, dp[ i ][ now ][ k ] );
                    goal = min( goal, dp[ i ][ j ][ now ] );
                }
            }
        }
        printf( "%d\n", goal );
    }
    return 0;
}
时间: 2024-12-15 07:12:47

UVALive 2031 Dance Dance Revolution的相关文章

UVA 1291 十四 Dance Dance Revolution

Dance Dance Revolution Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit Status Practice UVA 1291 Mr. White, a fat man, now is crazy about a game named ``Dance, Dance, Revolution". But his dance skill is so poor that h

递推DP UVA 1291 Dance Dance Revolution

题目传送门 1 /* 2 题意:给一串跳舞的动作,至少一只脚落到指定的位置,不同的走法有不同的体力消耗,问最小体力消费多少 3 DP:dp[i][j][k] 表示前i个动作,当前状态(j, k)的最小消费,状态转移方程:(a[i], k) <- min (a[i-1], k) + cost 4 以及(a[i-1], a[i]) <- min (a[i-1], k) + cost, (k, a[i])和(a[i], a[i-1])情况类似,最后再去最小值就行了 5 */ 6 /*********

UVALive - 2031 Dance Dance Revolution 三维dp

题目大意:有一个胖子在玩跳舞机,刚开始的位置在(0,0),跳舞机有四个方向键,上左下右分别对应1,2,3,4.现在有以下规则 1.如果从0位置移动到任意四个位置,消耗能量2 2.如果从非0位置跳到相邻的位置,如1跳到2或4,消耗能量3 3.如果从非0位置跳到对面的位置,如2跳到4,消耗能量4 4.如果跳同一个位置,消耗能量1 5.两只脚不能在同一个位置 解题思路:这题其实很水,直接暴力就可以解决了,讨论所有情况,用dp[i][j][k]表示跳第k个数字,左脚在i这个位置,右脚在j这个位置时所消耗

UVa 1291- Dance Dance Revolution(DP)

Dance Dance Revolution Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu SubmitStatus Description Mr. White, a fat man, now is crazy about a game named ``Dance, Dance, Revolution". But his dance skill is so poor that he could not dan

LA 2031

Mr. White, a fat man, now is crazy about a game named ``Dance, Dance, Revolution". But his dance skill is so poor that he could not dance a dance, even if he dances arduously every time. Does ``DDR" just mean him a perfect method to squander his

训练指南DP阶段训练1

最近又忙又颓.............时间抓不紧....下学期开始就要准备考研了.......就2个月左右可以做自己喜欢的事了....争取把紫书和白书没做的,做过的..来一次完整的总结 训练指南上面的5个例题+后面15个习题是第一阶段 vjudge训练地址 http://vjudge.net/contest/139533#overview -------------------------------------------------------------------------------

舞蹈家怀特先生

codevs 3049 舞蹈家怀特先生 http://codevs.cn/problem/3049/ 难度等级:黄金 题目描述 Description 怀特先生是一个大胖子.他很喜欢玩跳舞机(Dance Dance Revolution, DDR),甚至希望有一天人家会脚踏"舞蹈家怀特先生".可惜现在他的动作根本不能称作是在跳舞,尽管每次他都十分投入的表演.这也难怪,有他这样的体型,玩跳舞机是相当费劲的.因此,他希望写一个程序来安排舞步,让他跳起来轻松一些,至少不要每次都汗流浃背. D

uva 1291 dp

UVA 1291 - Dance Dance Revolution 有一个跳舞机.原点为0,有四个方向,上左下右,分别标成(1234),初始玩家两只脚站在 0 位置,跳舞机会给出一串数字,玩家要按照顺序踩下四个方向的数字.移动脚会消耗玩家的能量,从0位置移动到四个方向消耗2点能量,从一个方向移动到另一个相邻的方向消耗3点能量,从一个方向移动到相反方向消耗4点能量,原点踩一下消耗1点能量.问你踩出这串数子最少要花多少能量. 根据能量消耗关系,我们可以发现当前两只脚踩的方向才是重点.然而要记录两只脚

NYOJ 740 DP

“炫舞家“ST 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 ST是一个酷爱炫舞的玩家.TA很喜欢玩QQ炫舞,因此TA也爱屋及乌的喜欢玩跳舞机(Dance Dance Revolution,DDR).但是TA每天还要努力的学习,因此TA希望每次都保存最多的体力来学习. DDR的主要内容是用脚来踩踏板.踏板有4个方向的箭头,用1,2,3,4来代表,如下图所示. 游戏规则如下:   每首歌曲有一个箭头序列,游戏者必须按照这个序列依次用某一只脚踩相应的踏板.在任何时候,