CodeForces - 1096D Easy Problem(线性dp)
题目链接:点击查看
题目大意:给出一个字符串,每个字符都有一个权值,现在需要删除权值和最少的字符,满足字符串中不再含有子序列“hard”
题目分析:线性dp,但我不会,看着题解写的,首先令dp[ i ][ 1 ]为到第 i 个字符为止,字符串中不含有字符 ' h ' 的最少花费,再令dp[ i ][ 2 ]为到第 i 个字符为止,字符串中不含有字序列 “ ha ” 的最少花费,以此类推,一直到dp[ i ][ 4 ],那么以“ har ”的转移为例,我们如果想让第 i 个位置不含有子序列“har”,可以让前 i - 1 个位置中不含有子序列“ha”来转移,或者删掉当前位置的字符' r '来转移,故转移方程为:
dp[ i ][ j ] = min( dp[ i - 1 ][ j - 1 ] ,dp[ i - 1 ][ j ] + cost[ i ] )
答案就是dp[ n ][ 4 ]了
代码:
#include<iostream>
#include<cstdio>
#include<string>
#include<ctime>
#include<cstring>
#include<algorithm>
#include<stack>
#include<queue>
#include<map>
#include<set>
#include<cmath>
#include<sstream>
#include<unordered_map>
using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=1e5+100;char s[N],str[]=" hard";LL a[N],dp[N][5];int main()
{
// freopen("input.txt","r",stdin);
// ios::sync_with_stdio(false);int n;scanf("%d%s",&n,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[i][1]=dp[i-1][1]+a[i];elsedp[i][1]=dp[i-1][1];}for(int j=2;j<=4;j++)for(int i=1;i<=n;i++){if(s[i]==str[j])dp[i][j]=min(dp[i-1][j-1],dp[i-1][j]+a[i]);elsedp[i][j]=dp[i-1][j];}printf("%lld\n",dp[n][4]);return 0;
}
CodeForces - 1096D Easy Problem(线性dp)相关推荐
- 【CodeForces - 1096D】Easy Problem(dp,思维)
题目大意: 现在有一个由小写字母组成的字符串,去掉这个字符串的第i个位置的字符会有ai的代价.你的任务是去掉这个字符串中的一些字符使得该字符串中不包含子序列hard,且去掉字符的代价之和尽可能小. 输 ...
- codeforces 940E. Cashback(线性dp)
传送门 题意:给出一个nnn个数的序列,要求将序列分成若干段,对于一段长度为kkk的自动删去最小的⌊kc⌋\left \lfloor \frac{k}{c} \right \rfloor⌊ck⌋个数 ...
- CodeForces - 456C Boredom(线性dp)
题目链接:点击查看 题目大意:给出一个由n个数字组成的数列,现在给出规则是,每次选择数列中的一种数字 x,选择后的贡献为 x,不过操作后会删除掉所有数值为 x + 1 和 x - 1 的数,现在问如何 ...
- 0x51.动态规划 - 线性DP(习题详解 × 10)
目录 0x51.动态规划 - 线性DP 0x51.1 LIS问题 Problem A. 登山 (最长下降子序列) Problem B. 友好城市(思维) Problem C. 最大上升子序列和 0x5 ...
- Codeforces 429B Working out:dp【枚举交点】
题目链接:http://codeforces.com/problemset/problem/429/B 题意: 给你一个n*m的网格,每个格子上有一个数字a[i][j]. 一个人从左上角走到右下角,一 ...
- Codeforces 803E--Roma and Poker (DP)
原题链接:http://codeforces.com/problemset/problem/803/E 题意:给一个n长度的字符串,其中'?'可以替换成'D'.'W'.'L'中的任意一种,'D'等价于 ...
- 动态规划 —— 线性 DP
[概述] 线性动态规划,是较常见的一类动态规划问题,其是在线性结构上进行状态转移,这类问题不像背包问题.区间DP等有固定的模板. 线性动态规划的目标函数为特定变量的线性函数,约束是这些变量的线性不等式 ...
- Codeforces - 474D - Flowers - 构造 - 简单dp
https://codeforces.com/problemset/problem/474/D 这道题挺好的,思路是这样. 我们要找一个01串,其中0的段要被划分为若干个连续k的0. 我们设想一个长度 ...
- CodeForces 711C Coloring Trees (三维DP)
题目链接:http://codeforces.com/problemset/problem/711/C DP #include<bits/stdc++.h> using namespace ...
最新文章
- Ant Design Vue中a-select组件下拉列表在局部滚动时不跟随问题解决方法
- 直播预告 | 对话杨立昆:人,机器与未来
- .net堆栈与托管堆的区别
- const char *p、char const *p、char *const p
- Akka与设备组一起工作《twelve》译
- [终极精简版][图解]Nginx搭建flv mp4流媒体服务器
- linux 5.8 设备的mac地址与预想的不符 已忽略,解决“eth0设备的MAC 址与预想的不符,忽略”...
- 2021世界机器人大赛— 青少年机器人设计大赛
- 论文笔记:针对盲化的 RSA算法的水平聚类侧信道攻击
- AD14一般使用流程
- linux网络配置文件,Linux下一块网卡设置多个IP地址
- 看不见的大猩猩--读书笔记
- python批量转换音频格式,flac转mp3等
- 史上最全网络安全面试题合集
- app间共享(交互)方法
- 共线性诊断 matlab,求共线性诊断结果的含义
- esp-idf手动设置系统时间
- 如何使用IDEA创建一个新的项目
- Fiddler抓包6-打断点(bpu)
- 烂泥:linux文件同步之rsync学习(一)