UVA 10618 - Tango Tango Insurrection【DP】

该博客介绍了一道UVA在线判题平台上的问题,10618号题目——Tango Tango Insurrection。问题涉及到在跳舞机上以最低能量完成舞蹈步伐。博主详细分析了问题描述,给出了样例输入和输出,并讨论了解题思路。通过动态规划的方法,博主探讨了如何决定最优的踩踏顺序以最小化能量消耗。博客中还包括了问题的状态转移方程和可能的动作决策。
摘要由CSDN通过智能技术生成

题目大意

传送门

描述
跳舞机的踏板上有四个箭头:上下左右。当舞曲开始的时候,你需要在箭头移动到踏板上的时候,你需要在踏板上踩下相同的箭头。
不需要踩箭头的时候,踩箭头不会受到惩罚,当时需要踩箭头的时候,必须踩一下
踩箭头需要消耗能量,写一个程序来帮助选择轻松的踩踏方式,使得消耗的能量最少。

消耗能量:

  • 如果这个脚上个时间没有任何动作,消耗1单位能量
  • 如果这个脚上个时间没有移动,消耗3单位能量
  • 如果这个脚上个时间移动到相邻箭头,消耗5单位能量
  • 如果这个脚上个时间移动到相对箭头,消耗7单位能量

正常情况下,左脚不能放到右箭头上,但是有一种情况例外:当你的左脚在上箭头或者下箭头,你可以临时扭着身子用右脚踩左箭头,但是在右脚移动之前,左脚不能动。

输入
最多100组数据,每组数据包含一个长度不超过70的字符串。LR表示左右箭头,.表示不需要踩箭头,UD表示上下箭头。

输出
和输入一样长度的字符串,表示每个时间执行动作的脚,LR表示左右脚,.表示不踩。

Sample Input

LRLRLLLLRLRLRRRRLLRRLRLDU…D…UUUUDDDD
#

Sample Output

LRLRLLLLRLRLRRRRLLRRLRLRL…R…LLLLRRRR

思路

dp(i,a,b,s)表示已经踩了i个箭头。
左右脚分别在箭头a和箭头b上,
上一个周期移动的脚为s(s=0表示脚没有移动,s=1表示左脚移动,s=2表示右脚移动)

如果下一步是.,有三种决策:

  • 左脚移动到另一个箭头上
  • 右脚移动到另一个箭头上
  • 不动

如果下一步是4个箭头之一,有两种决策:

  • 左脚移动到该箭头
  • 右脚移动到该箭头。

代码

#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;

#define maxn 100
char S[maxn];


int dp[maxn][4][4][3];
int action[maxn][4][4][3]; 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值