Invoker

Time Limit: 15000/12000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)
Total Submission(s): 586    Accepted Submission(s): 100

Problem Description

在 dota2 中有一个叫做祈求者(Invoker)的英雄,在游戏中他有三个基础技能:冰(Quas),雷(Wex),火(Exort),每施展一个技能就可以获得相应属性的一个法球(element)。

但是祈求者同时最多只能有三个法球,即如果他在有三个法球的状态下又使用了某个法球技能,那么他会获得该法球,并失去之前三个法球中最先获得的一个。

不难得出,祈求者身上的三个法球的**无顺序**组合有 10 种,每一种都对应着一个组合技能:

1. 急速冷却(Cold Snap),无序组合 QQQ,用 Y 表示
2. 幽灵漫步(Ghost Walk),无序组合 QQW,用 V 表示
3. 寒冰之墙(Ice Wall),无序组合 QQE,用 G 表示
4. 电磁脉冲(EMP),无序组合 WWW,用 C 表示
5. 强袭飓风(Tornado),无序组合 QWW,用 X 表示
6. 灵动迅捷(Alacrity),无序组合 WWE,用 Z 表示
7. 阳炎冲击(Sun Strike),无序组合 EEE,用 T 表示
8. 熔炉精灵(Forge Spirit),无序组合 QEE,用 F 表示
9. 混沌陨石(Chaos Meteor),无序组合 WEE,用 D 表示
10. 超震声波(Deafening Blast),无序组合 QWE,用 B 表示

当祈求者拥有三个法球的时候,使用元素祈唤(Invoke)技能,用 R 表示,便可获得当前法球组合所对应的技能,同时原有的三个法球也不会消失,先后顺序的状态也不会改变。

现在给定一个技能序列,你想按照给定的顺序将他们一个一个地祈唤出来,同时你想用最少的按键来达到目标,所以你想知道对于给定的一个技能序列,最少按多少次键才能把他们都祈唤出来。

注意:游戏开始的时候,祈求者是没有任何法球的。

Input

仅一行一个字符串 s ,表示技能序列。其中所有字母都是大写,且在 {B,C,D,F,G,T,V,X,Y,Z} 内。

1≤|s|≤105

Output

仅一行一个正整数,表示最少按键次数。

Sample Input

 

XDTBV

Sample Output

 

14

Hint

一种按键最少的方案为:QWWREERERWQRQR

Source

 

642ccpcQHD

OJ题号

HDU 6379

简单题意

一个人有QWE三个基础技能,和一个大招R技能,每释放一个基础技能就会获得一个相应的技能点,最多同时拥有三个技能点,最早获得的技能点会被最新释放的技能点给挤走,每次释放R技能,就会根据现有的三个技能点的组合,释放出一个特殊技能,但是释放R技能不会消耗目前拥有的技能点。技能点组合对应的特殊技能名称如上图所示。现给出一列按时间顺序释放的特殊技能,问如何释放基础QWE技能以及R技能,使得释放的技能总数最小。

正解思路

我们可以知道当前技能释放需要增加按键数,是通过是一个技能决定的,关键看上一个技能含有当前技能的QWE有几个,我们知道总共就有36种状态,我们设dp[i][j]为当前为i个技能由第j种状态得来,具体看一下代码,一看就懂。

#include<bits/stdc++.h>
using namespace std;
#define maxn 105005
#define ll long long
map<char,string>mp;
int js(char x,int l1,int r1,char y,int l2,int r2)
{int sum=0;if(mp[x][l1]==mp[y][l2]&&mp[x][l1+1]==mp[y][l2+1]&&mp[x][l1+2]==mp[y][l2+2]){return 1;}else if(mp[x][l1+1]==mp[y][l2]&&mp[x][l1+2]==mp[y][l2+1])return 2;else if(mp[x][r1]==mp[y][l2])return 3;elsereturn 4;
}
char c[maxn];
int dp[maxn][10];
int main()
{mp['Y'] = "1QQQQQQQQQQQQQQQQQQ";mp['V'] = "1QQWQWQWQQQQWQWQWQQ";mp['G'] = "1QQEQEQEQQQQEQEQEQQ";mp['C'] = "1WWWWWWWWWWWWWWWWWW";mp['X'] = "1QWWWQWWWQQWWWQWWWQ";mp['Z'] = "1WWEWEWEWWWWEWEWEWW";mp['T'] = "1EEEEEEEEEEEEEEEEEE";mp['F'] = "1QEEEQEEEQQEEEQEEEQ";mp['D'] = "1WEEEWEEEWWEEEWEEEW";mp['B'] = "1QWEQEWWEQWQEEQWEWQ";while(scanf("%s",c+1)!=EOF){int n=strlen(c+1);for(int i=1;i<=6;i++)dp[1][i]=4;for(int i=2; i<=n; i++){for(int j=1; j<=6; j++){dp[i][j]=1e9;}for(int j=1; j<=6; j++){for(int k=1; k<=6; k++){dp[i][j]=min(dp[i][j],dp[i-1][k]+js(c[i-1],(k-1)*3+1,k*3,c[i],(j-1)*3+1,j*3));}}}int ans=1e9;for(int i=1; i<=6; i++)ans=min(dp[n][i],ans);printf("%d\n",ans);}
}

HDU 6379 Invoker (2019-CCPC-秦皇岛站)DP相关推荐

  1. 2019年CCPC秦皇岛站部分题解

    前言 感觉这套题有点难度,相比之下博主是真的菜狗. 不过只要lm队长讲明白MUV LUV EXTRA,欢姐绝杀掉Forest Program ,我再去挨个折磨,就等于菜狗博主的大胜利! Decimal ...

  2. 2018 CCPC秦皇岛站日记

    三题93名铜前,还可以 9/25 明天就要去秦皇岛了,感觉好,麻烦啊...这里就不激动了,因为要忙好多东西. 首先是我准备了几天的模板,因为第一次比赛的原因,所以我也是第一次准备这种比较正式的模板.除 ...

  3. Riddle(2018 CCPC (秦皇岛站) I 题)

    Problem Description Input Output Sample Input 3 3 1 1 1 5 1 1 2 2 3 10 1 2 3 4 5 6 7 8 9 10 Sample O ...

  4. 2019 CCPC 秦皇岛: MUV LUV EXTRA

    MUV LUV EXTRA (本篇主要内容,kmp求最短循环节) 题目传送门: MUV LUV EXTRA 题意: 给你一个字符串和两个整数a和b.在小数点后,找到一个循环节 l,循环长度为p.求 a ...

  5. 2019 CCPC秦皇岛 K.MUV LUV UNLIMITED(博弈)

    2019CCPC秦皇岛K 题意: 两个人玩游戏, 有一棵有根树,每次只能拿叶子节点若干个(不能不拿),问最后谁会赢 思路: 先说结论,数每个叶子节点对应上去的那条链(直到他的父亲除自己外有另外的儿子结 ...

  6. 【HDU6742 2019 CCPC 秦皇岛 】MUV LUV ALTERNATIVE 曼哈顿剧院 两出口观众逃生最短时间

    应岛娘邀请,自费机票回国打比赛. 队名--友谊是魔法.最终榜单如下--https://ccpc.io/post/187 这题是场上的L题. 一年多不写题也不想题情况下遇上了这场比赛的L题.是个贪心题, ...

  7. 2019 CCPC 秦皇岛F Forest Program(dfs)

    传送门 题意:给定一张无向简单图,同时规定一条边只属于一个环.可以删除任意条边使得这张图变成森林,也就是使得每一个连通块都是树.求一共有多少种方案. 分析:由于原题规定一条边只属于一个环,不需要考虑环 ...

  8. 2019 CCPC 秦皇岛 MUV LUV EXTRA kmp

    传送门 枚举循环节已出现的长度 p,最优的循环节就是最后 p 个字 符构成的字符串的最短周期. 考虑把字符串倒过来,使用 kmp 可以求出每个前缀的最短 周期,即求出了原串每个后缀的最短周期. #in ...

  9. 2019 CCPC秦皇岛 J 题 MUV LUV EXTRA【KMP 求最小循环节】

    题意: 原题意是给出一个有理数的前一部分,求这个有理数的无限循环部分是什么.有一个值来评估猜的准确度.转换一下就成了下面的题意: 给出一个字符串s,有某一个子串,设p为该子串在s的某个后缀中的匹配长度 ...

最新文章

  1. hql调用mysql存储过程_hibernate调用mysql存储过程
  2. LiveBos---扩展按钮调用方法
  3. Linux动态频率调节系统CPUFreq
  4. [LeetCode] Number of 1 Bits Reverse Integer - 整数问题系列
  5. C#中如何得到Graphics对象
  6. 快速学习一个新的模块
  7. 白鹭引擎增加点击事件实例
  8. NET多线程探索-线程同步和通信
  9. Vue3(setup函数介绍)
  10. 0 full gc时cpu idle_结合GC日志讲讲CMS垃圾收集器
  11. [转载] java clone方法_Java Calendar clone()方法与示例
  12. docker导入导出
  13. Spring IOC注入详解
  14. 苹果系统无法购买服务器,itunes目前无法处理您的购买怎么解决
  15. 【Android】Android模拟器的安装
  16. STM32初识及运用—GPIO
  17. Bitnami redmine 一键安装包
  18. 嵌入式系统中鲁棒性的理解
  19. 奖金600万美元的XPRIZE新冠病毒快速检测竞赛决出大奖获得者,以研制快速、大规模、低成本且简单易用的解决方案
  20. 2021年长安杯电子数据取证大赛

热门文章

  1. DFS(深度优先搜索)算法实现
  2. 【解决方案】物流行业如何通过国标GB28181协议国标平台EasyGBS建立车载视频可视化监控系统?
  3. FL Studio里一起安装的ASIO4ALL有什么用?
  4. 2020身高体重标准表儿童_【宝宝身高体重标准表】儿童身高体重标准表2020、2019_身高体重标准表_亲子百科_太平洋亲子网...
  5. 深度学习在视频多目标跟踪中的应用综述
  6. 前端大屏数据可视化示例
  7. weex:构建weex项目及注意事项
  8. PHP跨境电商商城系统源码支持多语言功能
  9. 薏米食品领军品牌先天元,借新零售之力创造十亿级产业
  10. 【RoboMaster】我是这样搞定第一次单目相机测距的