D. Easy Problem dp(有衔接关系的dp(类似于分类讨论) )
D. Easy Problem dp(有衔接关系的dp(类似于分类讨论) )
题意
给出一个串 给出删除每一个字符的代价问使得串里面没有hard的子序列需要付出的最小代价(子序列不连续也行)
思路
要满足hard 先要满足har 要满足har 先要满足ha 一次类推
这类问题的一个共同点是要每个地方都要满足一系列前置条件才能成立也就是说有衔接关系
所以如果是构造问题 那么dp数组加一维已经满足了几个,如果是删除问题dp数组加一维 切断了哪一个即可
所以我们可以设置dp数学 dp[i][1,2,3,4] 表示在i位置时 字符是h,a,r,d 对应于 1,2,3,4使得以h,a,r,d为前缀不存在的所需要消耗的最小代价是多少
这样\(dp[i][1]=dp[i-1][1]+a[i]\) 表示要使得h不存在 有h就要删掉h
\(dp[i][2]=max(dp[i-1][1],dp[i-1][2]+a[i])\)要使得ha不存在 要么没有h 要么没有a
\(dp[i][3]=max(dp[i-1][2],dp[i-1][3]+a[i])\)要使得har成立 要么没有要么a 要么没有r
\(dp[i][4]=max(dp[[i-1][3],dp[i-1][4]+a[i])\)同上
注意 这里i可以用滚动数组滚掉节省空间 不然开不下 记得开long long
#include<bits/stdc++.h>
using namespace std;
const int maxn = 3e5+5;
#define int long long
#define F first
#define S second
#define pb push_back
#define pii pair<int ,int >
#define mkp make_pair
const int inf=0x3f3f3f3f;
char s[maxn];
int a[maxn];
int dp[10];
int32_t main(){
int n;
scanf("%lld",&n);
scanf("%s",s+1);
for(int i=1;i<=n;i++)scanf("%lld",&a[i]);
for(int i=1;i<=n;i++){
if(s[i]=='h')dp[1]=dp[1]+a[i];
if(s[i]=='a')dp[2]=min(dp[1],dp[2]+a[i]);
if(s[i]=='r')dp[3]=min(dp[2],dp[3]+a[i]);
if(s[i]=='d')dp[4]=min(dp[3],dp[4]+a[i]);
}
cout<<dp[4]<<endl;
return 0;
}
D. Easy Problem dp(有衔接关系的dp(类似于分类讨论) )的更多相关文章
- 【Codeforces 1096D】Easy Problem
[链接] 我是链接,点我呀:) [题意] 让你将一个字符串删掉一些字符. 使得字符串中不包含子序列"hard" 删掉每个字符的代价已知为ai 让你求出代价最小的方法. [题解] 设 ...
- CF1096:D. Easy Problem(DP)
Vasya is preparing a contest, and now he has written a statement for an easy problem. The statement ...
- CF1096D Easy Problem
题目地址:CF1096D Easy Problem 比赛时高二dalaoLRZ提醒我是状压,然而,我还是没AC (汗 其实是一道很基础的线性dp \(f_{i,j}\) 表示序列第 \(i\) 个字符 ...
- 线段树:CDOJ1591-An easy problem A (RMQ算法和最简单的线段树模板)
An easy problem A Time Limit: 1000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Pr ...
- UVA-11991 Easy Problem from Rujia Liu?
Problem E Easy Problem from Rujia Liu? Though Rujia Liu usually sets hard problems for contests (for ...
- 图片大小以及dp和px关系一览表,logo尺寸
图片大小以及dp和px关系一览表 说明:根据上表,我们应该很容易算出一张图片在不同手机上的宽和高是多少. 结论 从上表可以得出如下结论 1. 图片放在drawable中,等同于放在drawable-m ...
- An easy problem
An easy problem Time Limit:3000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Sub ...
- UVa 11991:Easy Problem from Rujia Liu?(STL练习,map+vector)
Easy Problem from Rujia Liu? Though Rujia Liu usually sets hard problems for contests (for example, ...
- POJ 2826 An Easy Problem?!
An Easy Problem?! Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7837 Accepted: 1145 ...
随机推荐
- element-ui 1.4.13
Form 表单 rules 表单校验函数需要访问实例中的属性时应该把校验规则写为computed,校验函数写入methods <el-form-item prop="taxableIn ...
- Project Euler 133: Repunit nonfactors
题意 英文 做法 结论1:\(R(a)|R(am)(a,m\ge 1)\) \[\frac{R(am)}{R(a)}=\frac{\frac{10^{am}-1}{9}}{R(a)}=\frac{\f ...
- C# ASCII码的转换、转义字符、对照表
var splitStr = new byte[] { 0x05, 0x0D, 0x0A };//var splitStr = new byte[] { 5, 13, 10 };这样写也可以 var ...
- Socket之TCP-IP
通常的TCP/IP流程如下: TCP/IP的通讯更像是打电话,连接上通了确认是自己拨叫的用户之后才能进行正常通话,更加安全合理. Qt中的TCP/IP流程如下: Qt中流程和普通的思路一样,只是封装成 ...
- 使用uni-app开发小程序,关于小程序更新后与用户本地不会及时更新解决办法
1.原因分析 在小程序更新开发版本之后,用户本地并没有对之前版本的小程序进行删除,那么再进入小程序的时候的版本是不会发生变化的,这是由于发版是异步执行,因此新版本将会覆盖的比较慢,本质是小程序的启动方 ...
- multiprocessing 方法解析:
以上是关于进程池的使用,截下来开始介绍如何使用多进程,由于multiprocessing 实现比concurrent.futures 实现更加底层这里还是推荐大家使用concurrent.future ...
- centos6离线安装apache2.4
在/usr/local中新建文件夹 Apache2.4,将httpd安装包放入该文件夹, 解压:tar xvf httpd-2.4.41.tar.gz 进入httpd-2.4.41文件夹中,对Apac ...
- 杭电oj_2047——阿牛的EOF牛肉串(java实现)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2047 思路:先是列出了四个,但是没发现规律,然后开始画递归树,在其中找到了规律,算出递归式为f(n) ...
- @RendSection{"scripts",require:false}的作用
MVC视图中,Javascripts代码被放于下面的Razor代码中(@section Scripts{}). 好处:在视图进行JavaScript编程时,是一个很好的实践,在共享视图(_Layout ...
- [HNOI2013] 消毒 - 二分图匹配
容易发现 \(a,b,c\) 中至少有一个 \(\leq 17\) 不妨将其调剂为 \(a\),那么我们可以暴力枚举哪些 \(x\) 片片要被直接削掉,剩下的拍扁成二维情况 二维时,如果有一个格子是 ...