UVALive 2031 Dance Dance Revolution

题目大意:一个跳舞机,分上下左右中,中编号是0,然后从上开始逆时钟编号1、2、3、4,有一串你要踩的序列,从0到周围4个,花费为2,周围两个相邻的动一下是3,跳到对面去是4,同一格踩一下是1,两个脚不能同时踩在同一格,问你这串序列踩完最少的花费。

思路:动态规划的思想应该挺明确的,思路也挺清晰地,设d[ i ][ j ][ k ] 表示踩完第i个,左脚在i号位置,右脚在j号位置的最小值,状态转移方程为d[ i ][ pos ][ k ] = min(d[ i-1 ][ a ][ k ] + cost[a,pos]),d[ i ][ j ][ pos ] = min( d[ i -1 ][ j ][ a ] + cost[a,pos]) ,pos为第i个应踩的位置,前者为左脚踩过来,后面是右脚。

由于没告诉范围,掀开始我就开了个10^6的dp数组,可是一直都是TLE,感觉不会超时,然后看了下别人的,他们都是用滚动数组的,我改了一下,一交,马上AC。。 之后我把前面TLE那个改为10^5的数组,AC了,后来一看,果然是 memset 初始化的问题。。。感觉以后那种数组范围不确定的时候还是用滚动数组好一点。。 = =

代码如下:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;

const int INF = 0x0fffffff ;

int cost[5][5];

void init()
{
    for(int i = 1;i<=4;i++)
    {
        cost[0][i] = cost[i][0] = 2;
        cost[i][i] = 1;
    }
    cost[0][0] = 1;
    for(int i =1;i<=3;i++)
        cost[i][i+1] = cost[i+1][i] = 3;
    cost[1][4] = cost[4][1] = 3;

    cost[1][3] = cost[3][1] = 4;
    cost[2][4] = cost[4][2] = 4;
}

int d[2][5][5];

int main()
{
    init();
    int a;
    while(~scanf("%d",&a)&&a)
    {
        memset(d[0],0x7f,sizeof(d[0]));
        d[0][a][0] = d[0][0][a] = 2;
        int pre = 0;
        int cur ;
        while(scanf("%d",&a)&&a)
        {
            cur = pre^1;
            memset(d[cur],0x7f,sizeof(d[cur]));
            for(int j = 0;j<=4;j++)
                for(int k = 0;k<=4;k++)
                    d[cur][a][j] = min(d[pre][k][j] + cost[a][k],d[cur][a][j]);
            for(int j = 0;j<=4;j++)
                for(int k = 0;k<=4;k++)
                    d[cur][j][a] = min(d[pre][j][k] + cost[a][k],d[cur][j][a]);
            pre = cur;
        }
        int ans = INF;
        for(int i = 0;i<=4;i++)
            for(int j = 0;j<=4;j++)
            {
                if(i==j) continue;
                ans = min(d[cur][i][j],ans);
            }
        printf("%d\n",ans);
    }
    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: candance16.6是一款免费的音乐编辑软件,可以帮助用户编辑、裁剪、合并、转换音频文件格式等。该软件具有简单易用的界面和操作,同时提供多种音频编辑工具,可以满足用户各种音乐处理需求。 candance16.6的官方网站提供了该软件的下载地址,用户只需在官网上下载并安装即可开始使用。安装过程非常简单,无需任何高级知识。安装完成后,用户可以根据需要使用软件的不同功能进行编辑,例如裁剪、调整音量、调整声音平衡等等。 总的来说,candance16.6是一款功能齐全、简单易用的音乐编辑软件。如果您需要编辑音频文件,不妨尝试使用一下,相信会给您带来不少方便。 ### 回答2: candance16.6是一个舞蹈类软件,主要提供舞蹈动作教学以及音乐节奏配合的锻炼方式,旨在让用户享受舞蹈带来的身心愉悦和健康提升。用户可以通过该软件学习多种舞蹈类型,如拉丁舞、爵士舞、街舞等,并可以自由选择不同难度等级的教学视频进行跟随练习。此外,candance16.6还提供音乐播放及调节功能,用户可以根据自己的喜好选择不同的音乐风格,或是根据自己的身体状态调整音乐的速度和强度,以达到更好的锻炼效果。同时,该软件还支持社交分享功能,用户可以将自己在舞蹈练习中的成果分享给朋友圈、社交媒体等,展示自己的运动魅力和舞蹈技巧。总之,candance16.6是一款非常适合舞蹈和健身爱好者的软件,无论是初学者还是高级玩家都能从中找到自己的乐趣和收获。 ### 回答3: Candance16.6是一款用于舞蹈编排的软件,是Candance软件系列的其中一款。用户可通过其在计算机上进行舞蹈编排和排练,同时也能预览不同角度的舞蹈演示效果。Candance16.6支持各种不同舞蹈类型,如现代舞、芭蕾舞、拉丁舞和爵士舞等,同时也支持各种舞蹈曲风和节奏。 Candance16.6具有可视化的编辑工具,使得用户可以非常轻松地进行编排和舞蹈设计。它还可以生成音乐的波形图,用户可以根据波形图调整自己的舞蹈动作和步伐。 Candance16.6的功能非常强大,不仅可满足舞蹈编排的需求,也能在比赛和演出中提供支持,帮助用户更好地表现自己的舞姿和舞蹈技巧。值得注意的是,Candance16.6是付费软件,需要购买授权才能使用。 总之,Candance16.6是一个非常实用和强大的舞蹈编排软件,帮助用户轻松地进行舞蹈设计和排练,提高舞蹈表现能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值