【CodeForces - 1096D】Easy Problem(dp,思维)

题目大意:

现在有一个由小写字母组成的字符串,去掉这个字符串的第i个位置的字符会有ai的代价。你的任务是去掉这个字符串中的一些字符使得该字符串中不包含子序列hard,且去掉字符的代价之和尽可能小。

输入

第一行一个整数n表示字符串的长度(1<=n<=100000)。 第二行一个给定的字符串。 第三行n个整数a1,a2,a3,...,an(1<=ai<=998244353)。

输出

输出一个整数表示答案。

Examples

Input

6
hhardh
3 2 9 11 7 1

Output

5

Input

8
hhzarwde
3 2 6 9 4 8 7 1

Output

4

Input

6
hhaarr
1 2 3 4 5 6

Output

0

Note

In the first example, first two characters are removed so the result is ardh.

In the second example, 55-th character is removed so the result is hhzawde.

In the third example there's no need to remove anything.

解题报告:

考虑dp。首先有效字符只有hard四个字符,考虑转移。

如果出现不合法序列,最后一个字符肯定是d,并且前面按照顺序出现了har,所以可以设定dp[n][4]代表前缀不出现h,不出现ha,不出现har,不出现hard的最小代价。最后dp[n][4]就是答案。

转移就是对于四个字符中的每一个字符,假设是d,那么更新dp[i][4],则选择删除或者不删除这个字符,如果删除则从dp[i-1][4]+a[i]转移过来,如果不删除则需要保证前i-1个字符不能有har,所以dp[i-1][3]转移过来。

AC代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<stack>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define FF first
#define SS second
#define ll long long
#define pb push_back
#define pm make_pair
using namespace std;
typedef pair<int,int> PII;
const int MAX = 2e5 + 5;
char s[MAX];
int n,a[MAX];
ll dp[MAX][5];//h a r d
int main()
{memset(dp,0x3f,sizeof dp);for(int j = 1; j<=4; j++) dp[0][j] = 0; cin >> n;cin >> s+1;for(int i = 1; i<=n; i++) cin >> a[i];for(int i = 1; i<=n; i++) {for(int j = 1; j<=4; j++) dp[i][j] = dp[i-1][j];if(s[i] == 'h') dp[i][1] = dp[i-1][1]+a[i];if(s[i] == 'a') dp[i][2] = min(dp[i-1][2]+a[i],dp[i-1][1]);if(s[i] == 'r') dp[i][3] = min(dp[i-1][3]+a[i],dp[i-1][2]);if(s[i] == 'd') dp[i][4] = min(dp[i-1][4]+a[i],dp[i-1][3]);}printf("%lld\n",*min_element(dp[n]+1,dp[n]+5));return 0 ;
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/439799.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一步步编写操作系统 30 cpu的分支预测简介

人在道路的分岔口时要预测哪条路能够到达目的地&#xff0c;面对众多选择时&#xff0c;计算机也一样要抉择&#xff0c;毕竟计算机的运行方式是以人的思路来设计的&#xff0c;计算机中的抉择其实就是人在抉择。 cpu中的指令是在流水线上执行。分支预测&#xff0c;是指当处理…

【HDU - 5492】Find a path(dp,tricks)

题干&#xff1a; Frog fell into a maze. This maze is a rectangle containing NN rows and MM columns. Each grid in this maze contains a number, which is called the magic value. Frog now stays at grid (1, 1), and he wants to go to grid (N, M). For each step,…

Apollo进阶课程㉜丨Apollo ROS原理—1

原文链接&#xff1a;进阶课程㉜丨Apollo ROS原理—1 ROS在开发过程中&#xff0c;基于功能把整个自动驾驶系统分成多个模块&#xff0c;每个模块负责自己消息的接收、处理、发布。当模块需要联调时&#xff0c;通过框架可以把各个模块快速的集成到一起。 上周阿波君为大家详细…

Ubuntu下安装Chrome浏览器的两个方法

一、通过直接下载安装Google Chrome浏览器deb包。 打开Ubuntu终端&#xff0c;以下为32位版本&#xff0c;使用下面的命令。 wget https://dl.google.com/linux/direct/google-chrome-stable_current_i386.deb 以下为64位版本&#xff0c;使用下面的命令。 wget https://dl.…

【EOlymp - 2908】SumThem All(数位统计,tricks)

题干&#xff1a; Find the sum of all the digits in all the integers between lowerBound and upperBound inclusive. Input Each line contains two integers lowerBound and upperBound (0 ≤ lowerBound ≤ upperBound ≤ 2109). Output For each test case print i…

Apollo进阶课程㉝丨Apollo ROS原理—2

原文链接&#xff1a;进阶课程㉝丨Apollo ROS原理—2 在ROS系统中&#xff0c;从数据的发布到订阅节点之间需要进行数据的拷贝。在数据量很大的情况下&#xff0c;很显然这会影响数据的传输效率。所以Apollo项目对于ROS第一个改造就是通过共享内存来减少数据拷贝&#xff0c;以…

Java 10 常用集合继承关系图

概述 集合类存放的都是对象的引用&#xff0c;而非对象本身&#xff0c;出于表达上的便利&#xff0c;我们称集合中的对象就是指集合中对象的引用。 类图如下&#xff1a; 1、Iterable与Iterator接口之间的区别 我看到好多网上的文章类图里面Collection 是继承Iterator接口&a…

【CodeForces - 673D】Bear and Two Paths(构造,tricks)

题干&#xff1a; Bearland has n cities, numbered 1 through n. Cities are connected via bidirectional roads. Each road connects two distinct cities. No two roads connect the same pair of cities. Bear Limak was once in a city a and he wanted to go to a cit…

Apoll进阶课程㉞丨Apollo ROS原理—3

原文链接&#xff1a;进阶课程㉞丨Apollo ROS原理—3 机器人操作系统(ROS)是一个成熟而灵活的机器人编程框架。ROS提供了所需的工具&#xff0c;可以轻松访问传感器数据&#xff0c;处理数据&#xff0c;并为机器人的电机和其它执行器生成适当的响应。整个ROS系统被设计为在计…

JVM虚拟机选项:Xms Xmx PermSize MaxPermSize区别

ava虽然是自动回收内存&#xff0c;但是应用程序&#xff0c;尤其服务器程序最好根据业务情况指明内存分配限制。否则可能导致应用程序宕掉。 举例说明含义&#xff1a; -Xms128m 表示JVM Heap(堆内存)最小尺寸128MB&#xff0c;初始分配 -Xmx512m 表示JVM Heap(堆内存)最大允许…

SM3密码杂凑算法原理

目录 1.概述 2、算法描述 2.1 概述 2.2 填充 2.3 迭代压缩 2.3 消息扩展 2.4 压缩函数 2.5 杂凑值 1.概述 SM3是我国采用的一种密码散列函数标准&#xff0c;由国家密码管理局于2010年12月17日发布。相关标准为“GM/T 0004-2012 《SM3密码杂凑算法》”。 在商用密码体…

【Comet OJ - Contest #5 - C】迫真小游戏(优先队列,贪心构造,树,字典序)

题干&#xff1a; H君喜欢在阳台晒太阳&#xff0c;闲暇之余他会玩一些塔防小游戏。 H君玩的小游戏可以抽象成一棵 nn 个节点的有根树&#xff0c;树以 11 为根&#xff0c;每个点的深度定义为其到根的简单路径上的点数&#xff08;根的深度为 11&#xff09;。 H君有 nn 个…

动手学无人驾驶(1):交通标志识别

今天主要介绍无人驾驶当中深度学习技术的应用。 本文是根据博客专家AdamShan的文章整理而来&#xff0c;在此表示感谢。 关于深度学习的图像分类技术&#xff0c;网上已有很多关于深度学习的课程&#xff08;如吴恩达老师的深度学习专项课程&#xff09;&#xff0c;故本文不对…

《操作系统真象还原》-阅读笔记(上)

第一章 配置bochs&#xff0c;进入bochs simulator后一直是黑屏&#xff0c;原来默认是调试模式&#xff0c;需要输入C&#xff08;continue&#xff09;来让调试继续。 第二章 主讲MBR及进入MBR前的步骤 1.实模式只能访问1MB的内存空间。 2.BIOS在ROM中。 3.开机上电后CS&a…

Apollo进阶课程㉟丨Apollo ROS原理—4

原文链接&#xff1a;进阶课程㉟丨Apollo ROS原理—4 ROS是一个强大而灵活的机器人编程框架&#xff0c;从软件构架的角度说&#xff0c;它是一种基于消息传递通信的分布式多进程框架。 ROS本身是基于消息机制的&#xff0c;可以根据功能把软件拆分成为各个模块&#xff0c;每…

【HDU - 5917】Instability(规律,结论,Ramsey定理,知识点,tricks)

题干&#xff1a; Long long ago, there was a prosperous kingdom which consisted of n cities and every two cites were connected by an undirected road. However, one day a big monster attacked the kingdom and some roads were destroyed. In order to evaluate th…

《操作系统真象还原》-阅读笔记(中)

第七章 操作系统是由中断驱动的。 中断分为外部中断和内部中断。 外部中断分为可屏蔽中断和不可屏蔽中断&#xff0c;内部中断分为软中断和异常。 外部中断 来自CPU外部的中断。可屏蔽中断&#xff1a;通过INTR引脚进入CPU&#xff0c;外部设备如硬盘、网卡、打印机等发出的…

动手学无人驾驶(2):车辆检测

上一篇博客介绍了无人驾驶中深度学习在交通标志识别中的应用&#xff08;动手学无人驾驶&#xff08;1&#xff09;&#xff1a;交通标志识别&#xff09;。 本文介绍如何使用深度学习进行车辆检测&#xff0c;使用到的模型是YOLO模型&#xff0c;关于YOLO模型的具体检测原理&a…

【HDU - 5922】Minimum’s Revenge(思维,最小生成树变形)

题干&#xff1a; There is a graph of n vertices which are indexed from 1 to n. For any pair of different vertices, the weight of the edge between them is the least common multiple of their indexes. Mr. Frog is wondering about the total weight of the minim…

《操作系统真象还原》-阅读笔记(下)

第十一章 任意进程的页目录表第0~767个页目录项属于用户空间&#xff0c;指向用户页表。第768~1023个页目录项指向内核页表。每创建一个新的用户进程,就将内核页目录项复制到用户进程的页目录表&#xff0c;其次需要把用户页目录表中最后一个页目录项更新为用户进程自己的页目…