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 ...
随机推荐
- 阿里云IIS服务器SSL证书安装
一.前提条件 申请证书时需要选择 系统自动创建CSR. 申请证书时如果选择手动创建CSR,则不会生成证书文件.您需要选择其他服务器下载.crt证书文件后,使用openssl命令将.crt文件的证书转换 ...
- C++-蓝桥杯-小计算器[进制转化][模拟]
#include <cstdio> #include <string> #include <cstring> #include <iostream> u ...
- css 字体旋转
<div v-else> <img src="/img/dashboard/nodata.png"> <div style="color: ...
- tmp = 2/4;竟然没有发现的
我还纠结着单目运算符和双目运算符和乘除的一些优先级什么事情. #include "common.h" #include <stdio.h> #include <s ...
- MySql 小表驱动大表
在了解之前要先了解对应语法 in 与 exist. IN: select * from A where A.id in (select B.id from B) in后的括号的表达式结果要求之输出一列 ...
- String类型的日期怎么转化为Date类型
在一个SQL中,如果同时使用rownum和order by,会有一个先后顺序的问题. 比如select id1,id2 from t_tablename where rownum<3 order ...
- XSS进阶学习-转载
在这篇帖子里面真的可以学到很多xss的知识,特别有过xss基础的看完这个贴子绝对有帮助: 就像里面的师傅所说,看了一篇精髓文章之后,自己xss的功力突飞猛进了. 所提到的帖子入口:https://mp ...
- [Python]python对csv去除重复行 python 2020.2.11
用pandas库的.drop_duplicates函数 代码如下: import shutil import pandas as pd frame=pd.read_csv('E:/bdbk.csv', ...
- Jungle Roads POJ - 1251 模板题
#include<iostream> #include<cstring> #include<algorithm> using namespace std; cons ...
- 关于Euler-Poisson积分的几种解法
来源:https://www.cnblogs.com/Renascence-5/p/5432211.html 方法1:因为积分值只与被积函数和积分域有关,与积分变量无关,所以\[I^{2}=\left ...