Educational Codeforces Round 57 (Rated for Div. 2) D dp
https://codeforces.com/contest/1096/problem/D
题意
给一个串s,删掉一个字符的代价为a[i],问使得s的子串不含"hard"的最小代价
题解
- 定义\(dp[i][j]\)为到第i位下一个将要匹配j的最小代价
- \(若s[i]==t[j]\)
- 删掉:\(min(dp[i+1][j],dp[i][j]+a[i])\)
- 不删,若j<3:\(min(dp[i+1][j+1],dp[i][j])\)
- \(若s[i]!=t[j]\)
- 不用删:\(min(dp[i+1][j],dp[i][j])\)
- \(若s[i]==t[j]\)
- \(ans=min(dp[n][i]),0 \leq i \leq 3\)
代码
#include<bits/stdc++.h>
#define ll long long
#define inf 0x3f3f3f3f
#define MAXN 100005
using namespace std;
ll dp[MAXN][4],a[MAXN],ans;
int n;string s;
int main(){
cin>>n>>s;
memset(dp,inf,sizeof(dp));
for(int i=0;i<n;i++)scanf("%lld",&a[i]);
string t="hard";
dp[0][0]=0;
for(int i=0;i<n;i++){
for(int j=0;j<4;j++){
if(dp[i][j]==inf)continue;
if(s[i]==t[j]){
dp[i+1][j]=min(dp[i+1][j],dp[i][j]+a[i]);
if(j<3)dp[i+1][j+1]=min(dp[i+1][j+1],dp[i][j]);
}else{
dp[i+1][j]=min(dp[i+1][j],dp[i][j]);
}
}
}
ans=1e18;
for(int i=0;i<4;i++)ans=min(ans,dp[n][i]);
cout<<ans;
}
Educational Codeforces Round 57 (Rated for Div. 2) D dp的更多相关文章
- Educational Codeforces Round 57 (Rated for Div. 2) ABCDEF题解
题目总链接:https://codeforces.com/contest/1096 A. Find Divisible 题意: 给出l,r,在[l,r]里面找两个数x,y,使得y%x==0,保证有解. ...
- Educational Codeforces Round 57 (Rated for Div. 2) C 正多边形 + 枚举
https://codeforces.com/contest/1096/problem/C 题意 问是否存在一正多边形内三点构成的角度数为ang,若存在输出最小边数 题解 三点构成的角是个圆周角,假设 ...
- Educational Codeforces Round 57 (Rated for Div. 2)
我好菜啊. A - Find Divisible 好像没什么可说的. #include<cstdio> #include<cstring> #include<algori ...
- Educational Codeforces Round 57 (Rated for Div. 2)D(动态规划)
#include<bits/stdc++.h>using namespace std;char s[100007];long long a[100007];long long dp[100 ...
- Educational Codeforces Round 57 (Rated for Div. 2) 前三个题补题
感慨 最终就做出来一个题,第二题差一点公式想错了,又是一波掉分,不过我相信我一定能爬上去的 A Find Divisible(思维) 上来就T了,后来直接想到了题解的O(1)解法,直接输出左边界和左边 ...
- Educational Codeforces Round 58 (Rated for Div. 2) F dp + 优化(新坑) + 离线处理
https://codeforces.com/contest/1101/problem/F 题意 有n个城市,m辆卡车,每辆卡车有起点\(s_i\),终点\(f_i\),每公里油耗\(c_i\),可加 ...
- Educational Codeforces Round 63 (Rated for Div. 2) D dp(最大连续子序列)
https://codeforces.com/contest/1155/problem/D 题意 一个n个数的数组\(a[i]\),可以选择连续的一段乘x,求最大连续子序列的值 题解 错误思路:贪心, ...
- Educational Codeforces Round 76 (Rated for Div. 2)E(dp||贪心||题解写法)
题:https://codeforces.com/contest/1257/problem/E 题意:给定3个数组,可行操作:每个数都可以跳到另外俩个数组中去,实行多步操作后使三个数组拼接起来形成升序 ...
- Educational Codeforces Round 71 (Rated for Div. 2)-E. XOR Guessing-交互题
Educational Codeforces Round 71 (Rated for Div. 2)-E. XOR Guessing-交互题 [Problem Description] 总共两次询 ...
随机推荐
- tf.ConfigProto()
tf.ConfigProto一般用在创建session的时候用来对session进行参数配置 with tf.Session(config=tf.ConfigProto(...)...) tf.Con ...
- vuex 源码解析(三) getter属性详解
有时候我们需要从store中的state中派生出一些状态,例如: <div id="app"> <p>{{reverseMessage}}</p> ...
- hdu-6071 Lazy Running
In HDU, you have to run along the campus for 24 times, or you will fail in PE. According to the rule ...
- sysstat工具包之mpstat
mpstat 1 简介 mpstat是一个实时监控工具,主要报告与CPU相关统计信息,信息存放在/proc/stat文件中: 在多核心cpu系统中,不仅可以查看cpu平均信息,还可以查看指定cpu信息 ...
- C#下的时间测试(用于计算方法执行时间)
public class Timing { private TimeSpan m_StartTime; private TimeSpan duringTime; public Timing() //构 ...
- 避免HBase PageFilter踩坑,这几点你必须要清楚
有这样一个场景,在HBase中需要分页查询,同时根据某一列的值进行过滤. 不同于RDBMS天然支持分页查询,HBase要进行分页必须由自己实现.据我了解的,目前有两种方案, 一是<HBase权威 ...
- 十一:外观模式详解(Service,action与dao)
定义:外观模式是软件工程中常用的一种软件设计模式.它为子系统中的一组接口提供一个统一的高层接口.这一接口使得子系统更加容易使用. 该定义引自百度百科,它的表现很简单,将一系列子接口的功能进行整理,从而 ...
- QLineEdit默认提示 setPlaceholderText
Setting this property makes the line edit display a grayed-out placeholder text as long as the text( ...
- 阿里云 centos7 安装MySQL8.0.13
1.下载MySQL安装包(这里是有技巧的,说不定我这时写这个的时候版本还是你看到时的旧版本了,如果已经不是8.0了,可以根据这样来 下新版本) 先进入官网 再将这两者一结合,就是最新版本的了 所以 [ ...
- Android Studio 3.5+ 使用androidx的recyclerView
一 File->project structure->Dependencies: 点击All Dependencies处的加号,选择Library Dependency: 在step1处输 ...