CF1096D Easy Problem(DP)
题意:给出一个字符串,去掉第i位的花费为a[i],求使字符串中子串不含hard的最小代价。
题解:这题的思路还是比较套路的,
dp[i][kd]两维,kd=0表示不含d的最小花费,1表示不含rd的,2表示不含ard的,3表示不含hard的
那么转移方程就显而易见了,一言概之就是如果前面没有,我这也要没有,就这位一定要去,否则不用去
代码如下:
#include<bits/stdc++.h>
using namespace std; int n,a[];
char s[];
long long dp[][]; int main()
{
scanf("%d",&n);
scanf("%s",s+);
for(int i=;i<=n;i++)
{
scanf("%d",&a[i]);
}
for(int i=n;i>=;i--)
{
dp[i][]=dp[i+][];
dp[i][]=dp[i+][];
dp[i][]=dp[i+][];
dp[i][]=dp[i+][];
if(s[i]=='d')
{
dp[i][]=dp[i+][]+a[i];
dp[i][]=min(dp[i+][],dp[i+][]);
}
if(s[i]=='r')
{
dp[i][]=dp[i+][]+a[i];
dp[i][]=min(dp[i+][],dp[i+][]);
}
if(s[i]=='a')
{
dp[i][]=dp[i+][]+a[i];
dp[i][]=min(dp[i+][],dp[i+][]);
}
if(s[i]=='h')
{
dp[i][]=dp[i+][]+a[i];
}
}
long long ans=;
ans=min(min(dp[][],dp[][]),min(dp[][],dp[][]));
printf("%lld\n",ans);
} #include<bits/stdc++.h>
using namespace std; int n,a[];
char s[];
long long dp[][]; int main()
{
scanf("%d",&n);
scanf("%s",s+);
for(int i=;i<=n;i++)
{
scanf("%d",&a[i]);
}
for(int i=n;i>=;i--)
{
dp[i][]=dp[i+][];
dp[i][]=dp[i+][];
dp[i][]=dp[i+][];
dp[i][]=dp[i+][];
if(s[i]=='d')
{
dp[i][]=dp[i+][]+a[i];
dp[i][]=min(dp[i+][],dp[i+][]);
}
if(s[i]=='r')
{
dp[i][]=dp[i+][]+a[i];
dp[i][]=min(dp[i+][],dp[i+][]);
}
if(s[i]=='a')
{
dp[i][]=dp[i+][]+a[i];
dp[i][]=min(dp[i+][],dp[i+][]);
}
if(s[i]=='h')
{
dp[i][]=dp[i+][]+a[i];
}
}
long long ans=;
ans=min(min(dp[][],dp[][]),min(dp[][],dp[][]));
printf("%lld\n",ans);
}
CF1096D Easy Problem(DP)的更多相关文章
- CF1096D Easy Problem
题目地址:CF1096D Easy Problem 比赛时高二dalaoLRZ提醒我是状压,然而,我还是没AC (汗 其实是一道很基础的线性dp \(f_{i,j}\) 表示序列第 \(i\) 个字符 ...
- D. Easy Problem dp(有衔接关系的dp(类似于分类讨论) )
D. Easy Problem dp(有衔接关系的dp(类似于分类讨论) ) 题意 给出一个串 给出删除每一个字符的代价问使得串里面没有hard的子序列需要付出的最小代价(子序列不连续也行) 思路 要 ...
- 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(DP)
貌似最近刷了好多的CF题…… 题目链接:CF原网 洛谷 题目大意:有一个长度为 $n$ 的字符串 $s$,删除第 $i$ 个字符需要代价 $a_i$.问使得 $s$ 不含有子序列(不是子串)" ...
- Codeforces 1096D - Easy Problem - [DP]
题目链接:http://codeforces.com/problemset/problem/1096/D 题意: 给出一个小写字母组成的字符串,如果该字符串的某个子序列为 $hard$,就代表这个字符 ...
- HDU 4359——Easy Tree DP?——————【dp+组合计数】
Easy Tree DP? Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)To ...
- 线段树:CDOJ1591-An easy problem A (RMQ算法和最简单的线段树模板)
An easy problem A Time Limit: 1000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Pr ...
- HDU 4359 Easy Tree DP?
Easy Tree DP? Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)To ...
- UVA-11991 Easy Problem from Rujia Liu?
Problem E Easy Problem from Rujia Liu? Though Rujia Liu usually sets hard problems for contests (for ...
随机推荐
- 求数组中的逆序对的数量----剑指offer36题
在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数: 如数组{7,5,6,4},逆序对总共有5对,{7,5},{7,6},{7, ...
- 疯狂JAVA——第三章 数据类型和运算符
3.1注释 1.单行注释 2.多行注释 3.文档注释——文档注释以斜线后紧跟两个星号(/**)开始,以星号后紧跟一个斜线结束(*/),中间部分都是文档注释,会被提取到API文档中. API文档类似于产 ...
- 网站连接数据库连接不上原因是ip地址与端口号格式不对
192.168.1.1:8080这样连接一直出错, 后来改为192.168.1.1,8080就可以了 原因是格式不对,把冒号给为逗号就可以了
- cdoj841-休生伤杜景死惊开 (逆序数变形)【线段树 树状数组】
http://acm.uestc.edu.cn/#/problem/show/841 休生伤杜景死惊开 Time Limit: 3000/1000MS (Java/Others) Memory ...
- SpringMVC工作原理2(代码详解)
图1.流程图 1.当一个请求(request)过来,进入DispatcherServlet中,里面有个方法叫 doDispatch()方法 里面包含了核心流程 源码如下: 4.然后往下看getHand ...
- ueditor使用注意
问题1:后端配置项没有正常加载,上传插件不能正常使用! 我用的是开发版,1.4.3.3 .Net版 网上查了很多,后来发现只是配置的问题而已. 1.在根目录下:config.json 其中有Img上传 ...
- 配置springMVC
1.web.xml 前端控制器 配置规则:*.do: 拦截请求路径所有的后缀为.do;/* : 拦截所有, .jsp页面也会拦截; 不会使用此配置, 因为视图会无法跳转;/ : 拦截所有, .jsp页 ...
- Spark设计思想浅析
Spark is no rocket science!——博主 了解分布式计算的朋友,一定知道DAG这样一个概念.其实我接触DAG也是在学习MapReduce时了解到的.(具体可查阅<大数据日知 ...
- 品味性能之道<一>:性能测试思维与误区
<java performance><品悟性能优化 oracle><面向模式的软件架构-模式系统>读书笔记应用调优分享. 性能问题的解决,首 ...
- 低配NOSQL
东西写的太简单了 都不好意思说是NOSQL 其实就是STL 的map容器记录了写入的信息 解析了下数据仅此. 分析的时候想了很多 比如学习redis的自写hash,动态调整hash表容量. 比如右值或 ...