题目大意
描述
跳舞机的踏板上有四个箭头:上下左右。当舞曲开始的时候,你需要在箭头移动到踏板上的时候,你需要在踏板上踩下相同的箭头。
不需要踩箭头的时候,踩箭头不会受到惩罚,当时需要踩箭头的时候,必须踩一下
踩箭头需要消耗能量,写一个程序来帮助选择轻松的踩踏方式,使得消耗的能量最少。
消耗能量:
- 如果这个脚上个时间没有任何动作,消耗1单位能量
- 如果这个脚上个时间没有移动,消耗3单位能量
- 如果这个脚上个时间移动到相邻箭头,消耗5单位能量
- 如果这个脚上个时间移动到相对箭头,消耗7单位能量
正常情况下,左脚不能放到右箭头上,但是有一种情况例外:当你的左脚在上箭头或者下箭头,你可以临时扭着身子用右脚踩左箭头,但是在右脚移动之前,左脚不能动。
输入
最多100组数据,每组数据包含一个长度不超过70的字符串。L
和R
表示左右箭头,.
表示不需要踩箭头,U
和D
表示上下箭头。
输出
和输入一样长度的字符串,表示每个时间执行动作的脚,L
和R
表示左右脚,.
表示不踩。
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];