Codeforces 1096D Easy Problem 【DP】
<题目链接>
题目大意:
给你一个字符串,每个字符有权值,问现在删除字符串中的字符使其中没有"hard"的最小代价是多少。
解题分析:
用DP来求解: 转载于 >>>
dp[i][1]:表示字符串s的前i个字符中不含有前缀'h'的最小代价
dp[i][2]:表示字符串s的前i个字符中不含有前缀'ha'的最小代价
dp[i][3]:表示字符串s的前i个字符中不含有前缀'har'的最小代价
dp[i][4]:表示字符串s的前i个字符中不含有前缀'hard'的最小代价
对于状态转移,例如对dp[i][3],如果位置i的字符不是r,那么dp[i][3] = dp[i - 1][3];
否则,要么去掉位置i的字符,则代价为dp[i - 1][3] + a[i],如果不去除该位置字符,那么之前的序列不能含有'ha',则代价为dp[i - 1][2]。
#include <bits/stdc++.h>
using namespace std; #define N int(1e5+7)
typedef long long ll;
ll dp[N][],arr[N];
char s[N];
const ll INF = 1e18;
const char str[]="0hard"; int main(){
int n;scanf("%d",&n);
scanf("%s",s+);
for(int i=;i<=n;i++)scanf("%d",&arr[i]);
for(int i=;i<=n;i++)dp[i][]=INF;
if(s[]=='h')dp[][]=arr[];
for(int i=;i<=n;i++)
for(int j=;j<=;j++){
if(s[i]!=str[j])dp[i][j]=dp[i-][j];
else dp[i][j]=min(dp[i-][j]+arr[i],dp[i-][j-]); //以j=3为例,dp[i-1][j]为前i-1项不含'har',并且去除第j项的'r'的代价(因为前i-1项可能包含'ha'),dp[i-1][j-1]表示前i-1项连'ha'都不包含
}
printf("%lld\n",dp[n][]);
}
一维的写法:
#include <bits/stdc++.h>
using namespace std; typedef long long ll;
ll dp[];
char s[int(1e5+)];
const char ss[]="0hard";
int main(){
int n;cin>>n;
scanf("%s",s+);
for(int i=;i<=n;i++){
ll now;scanf("%lld",&now);
if(s[i]=='h')dp[]+=now;
for(int j=;j<=;j++)
if(s[i]==ss[j])dp[j]=min(dp[j]+now,dp[j-]);
}
printf("%lld\n",dp[]);
}
2019-02-17
Codeforces 1096D Easy Problem 【DP】的更多相关文章
- Codeforces 1096D - Easy Problem - [DP]
		
题目链接:http://codeforces.com/problemset/problem/1096/D 题意: 给出一个小写字母组成的字符串,如果该字符串的某个子序列为 $hard$,就代表这个字符 ...
 - poj2826 An Easy Problem?!【计算几何】
		
含[三点坐标计算面积].[判断两线段是否有交点].[求线段交点]模板 An Easy Problem?! Time Limit: 1000MS Memory Limit: 65536K Tot ...
 - Codeforces 1027E  Inverse Coloring 【DP】
		
Codeforces 1027E Inverse Coloring 题目链接 #include<bits/stdc++.h> using namespace std; #define N ...
 - [CodeForces - 1225E]Rock Is Push 【dp】【前缀和】
		
[CodeForces - 1225E]Rock Is Push [dp][前缀和] 标签:题解 codeforces题解 dp 前缀和 题目描述 Time limit 2000 ms Memory ...
 - HDOJ 1423 Greatest Common Increasing Subsequence 【DP】【最长公共上升子序列】
		
HDOJ 1423 Greatest Common Increasing Subsequence [DP][最长公共上升子序列] Time Limit: 2000/1000 MS (Java/Othe ...
 - HDOJ 1501 Zipper 【DP】【DFS+剪枝】
		
HDOJ 1501 Zipper [DP][DFS+剪枝] Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Ja ...
 - HDOJ 1257 最少拦截系统 【DP】
		
HDOJ 1257 最少拦截系统 [DP] Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
 - HDOJ 1159 Common Subsequence【DP】
		
HDOJ 1159 Common Subsequence[DP] Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K ...
 - HDOJ_1087_Super Jumping! Jumping! Jumping! 【DP】
		
HDOJ_1087_Super Jumping! Jumping! Jumping! [DP] Time Limit: 2000/1000 MS (Java/Others) Memory Limit: ...
 
随机推荐
- Mysql8.0安装步骤
			
Mysql8.0安装步骤 2018年05月10日 14:39:05 93年的香槟 阅读数:19628 标签: mysql 更多 个人分类: 数据库 版权声明:本文为博主原创文章,未经博主允许不得转 ...
 - Confluence 6 允许其他用户编辑站点欢迎消息
			
你可以通过使用 Include Page 宏从你站点其他页面中包含内容,而允许其他不是 Confluence 管理员的用户编辑站点欢迎消息.使用这种方式能够避免直接对模板文件中的内容进行编辑. 从站点 ...
 - Uiautomator - 6.0 以上权限受限问题
			
问题:在android studio中使用UiAutomator 2.0 编写测试用例时,要实现截图(非命令方式),写入文件时出现权限被拒绝的提示.例如: java.io.FileNotFoundEx ...
 - doy09 文件处理,拷贝文件
			
一\在python中打开文件,得到文件语句并赋值给一个变量 f=open('a.txt','r',encoding='utf-8')) 默认打开模式就为r: 2.通过句柄对文件进行操作 data=f ...
 - Memcached常用语法与java连接服务
			
memcached常用语法及java使用方式 Author:SimpleWu Memcached 存储命令 Memcached set 命令用于将 value(数据值) 存储在指定的 key(键) 中 ...
 - 【python】gevent协程例子
			
说在前面:用协程还是多线程需要仔细考量.我在做实验时请求了100w个ip,分别用pool为1000的协程和64个线程来跑,结果是多线程的速度是协程的10倍以上. 一个简单的协程例子 #!/usr/bi ...
 - HTMLTestRunner 美化版本
			
前言 最近小伙伴们在学玩python,,看着那HTMLTestRunner生成的测试报告,左右看不顺眼,终觉得太丑.搜索了一圈没有找到合适的美化报告,于是忍不住自已动手进行了修改,因习惯python ...
 - C++中explicit关键字的作用 (转)
			
explicit用来防止由构造函数定义的隐式转换. 要明白它的作用,首先要了解隐式转换:可以用单个实参来调用的构造函数定义了从形参类型到该类类型的一个隐式转换. 例如: class things { ...
 - Just Oj 2017C语言程序设计竞赛高级组E: DATE ALIVE(二分匹配)
			
E: DATE ALIVE 时间限制: 1 s 内存限制: 128 MB 提交 我的状态 题目描述 五河士道家里的精灵越来越多了,而每一个精灵都想和他有一个约会.然而五河士道却只有一个,无奈 ...
 - Django-model基础
			
Django-model基础 在Django-ORM中表和类存在映射关系 表名<------------>类名 字段<------------>属性 表记录<------ ...