题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6739

借鉴了这个网址的题解:https://blog.csdn.net/qq_41785863/article/details/101676640

题意:每个大写字母代表一个技能,每个技能都由三个法球组成(无序的)。现在给出一串技能字符串,要求求出释放所有技能所需的最小按键次数、每输入一个法球按键一次,释放技能时需要按键一次(R)。

思路:因为技能的组成是无序的,也就是每个技能有6种组合方式,可以全部枚举出来。后一个技能也可以全部枚举出来,这样找到相邻技能36种组合中,链接起来时,法球数目最少的。即可以得到我们的状态转移方程。

dp[i][j]表示以j组合形式释放第i种技能时的最少按键次数。

代码如下:

 #include<stdio.h>
#include<iostream>
#include<string.h>
#include<string>
#include<map>
#include<algorithm>
#define mem(a, b) memset(a, b, sizeof(a))
const int MAXN = 1e5 + ;
const int inf = 0x3f3f3f3f;
using namespace std; map<char, string> mp;
char s[MAXN];
int dp[MAXN][];
int dir[][] = {, , ,
, , ,
, , ,
, , ,
, , ,
, , }; int cal(string s, string s1, int x, int y)
{
int ret;
if(s[dir[x][]] == s1[dir[y][]] && s[dir[x][]] == s1[dir[y][]] && s[dir[x][]] == s1[dir[y][]]) ret = ;
else if(s[dir[x][]] == s1[dir[y][]] && s[dir[x][]] == s1[dir[y][]]) ret = ;
else if(s[dir[x][]] == s1[dir[y][]]) ret = ;
else ret = ;
return ret;
} int main()
{
mp['Y'] = "QQQ", mp['V'] = "QQW", mp['G'] = "QQE", mp['C'] = "WWW";
mp['X'] = "QWW", mp['Z'] = "WWE", mp['T'] = "EEE", mp['F'] = "QEE";
mp['D'] = "WEE", mp['B'] = "QWE"; while(scanf("%s", s + ) != EOF)
{
int len = strlen(s + );
mem(dp, inf);
for(int i = ; i < ; i ++)
dp[][i] = ;
for(int i = ; i <= len; i ++)
for(int j = ; j < ; j ++)
for(int k = ; k < ; k ++)
dp[i][j] = min(dp[i][j], dp[i - ][k] + cal(mp[s[i - ]], mp[s[i]], k, j) + );
int ans = inf;
for(int i = ; i < ; i ++)
ans = min(ans, dp[len][i]);
printf("%d\n", ans);
}
return ;
}

最新文章

  1. Windows Server 2003安装方法
  2. 好用的第三方控件,Xcode插件(不断更新)
  3. Javascript技巧
  4. Hive性能优化
  5. Android 之 Intent(意图)
  6. 利用gitbash上传项目到github
  7. java System.out
  8. Go运行环境搭建(Mac\Linux)
  9. Queryable.GroupBy&lt;TSource, TKey&gt; 方法 (IQueryable&lt;TSource&gt;, Expression&lt;Func&lt;TSource, TKey&gt;&gt;) 转
  10. 【USACO 2.4.1】两只塔姆沃斯牛
  11. OC 调用JS 代码 处理HTML5 实战
  12. spring-boot-2.0.3源码篇 - @Configuration、Condition与@Conditional
  13. SMS PDU编码数据串格式分析
  14. vue脚手架 构建豆瓣App 第一天
  15. css3 制作一个遮罩
  16. div中的img垂直居中的方法,最简单! 偷学来的,,,不要说我抄袭啊(*^__^*)
  17. 20155316 《网络对抗》Exp8 Web基础
  18. 转载:Linux批量远程管理主机命令_pssh用法详解
  19. Springboot中静态资源和拦截器处理(踩了坑)
  20. bzoj 4025 二分图——线段树分治+LCT

热门文章

  1. 005_STM32程序移植之_RC522读卡模块
  2. Chrome浏览器设置自动启用Flash插件
  3. python 改变函数实参的值
  4. 2019 Multi-University Training Contest 10
  5. include指令与jsp:include动作标识的区别
  6. Flask 编写一个授权登录验证的模块(一)
  7. 令人窒息的操作,nodejs面向对象。
  8. Maven Web项目出现org.eclipse.jdt.internal.compiler.classfmt.ClassFormatException错误
  9. python 库 imgaug数据增强
  10. linux下添加动态链接库路径、动态库加载等方法