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 ...
随机推荐
- post与get的区别
GET请求在URL中传送的参数大多数浏览器限制该长度为2kb的,而POST没有. GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息. GET参数通过URL传递,POST放 ...
- 问题解决Android studio遇到 java.lang.OutOfMemoryError: GC app:transformClassesWithDexForDebug解决方法 以及gradle优化
http://blog.csdn.net/xiaoxing0828/article/details/52242090
- intellij idea14 +svn配置
说明:使用TortoiseSVN客户端,安装时必须选择client tools,否则不会有svn.exe,也就不能支持intellij idea的svn插件,因为intellij idea是使用命令行 ...
- Python3 open() 函数
Python3 open() 函数 Python3 内置函数 Python open() 方法用于打开一个文件,并返回文件对象,在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛出 ...
- Java获取资源文件
比如我们有以下目录 |--project |--src |--javaapplication |--Test.java |--file1.txt |--file2.txt |--build |--ja ...
- sqserver2008触发器
@参考博文 先上代码 先建个表用于测试 CREATE TRIGGER INSERT_forbidden on s after INSERT AS BEGIN RAISERROR(,) ROLLBACK ...
- SQL某时间段记录查询
--查询当天: select * from info where DateDiff(dd,datetime,getdate())=0 --查询24小时内的: select * from info wh ...
- oracle pl sql import export
http://blog.163.com/magicc_love/blog/static/185853662201281013345829/
- Tornado异步阻塞解决方案
在 tornado 中异步无阻塞的执行耗时任务 在 linux 上 tornado 是基于 epoll 的事件驱动框架,在网络事件上是无阻塞的.但是因为 tornado 自身是单线程的,所以如果我们在 ...
- Python3编程技巧
高效处理数据类型方法: In []: from random import randint In []: data=[randint(-,) )] In []: data Out[]: [-, -, ...