<题目链接>

题目大意:

给你一个字符串,每个字符有权值,问现在删除字符串中的字符使其中没有"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】的更多相关文章

  1. Codeforces 1096D - Easy Problem - [DP]

    题目链接:http://codeforces.com/problemset/problem/1096/D 题意: 给出一个小写字母组成的字符串,如果该字符串的某个子序列为 $hard$,就代表这个字符 ...

  2. poj2826 An Easy Problem?!【计算几何】

    含[三点坐标计算面积].[判断两线段是否有交点].[求线段交点]模板   An Easy Problem?! Time Limit: 1000MS   Memory Limit: 65536K Tot ...

  3. Codeforces 1027E Inverse Coloring 【DP】

    Codeforces 1027E Inverse Coloring 题目链接 #include<bits/stdc++.h> using namespace std; #define N ...

  4. [CodeForces - 1225E]Rock Is Push 【dp】【前缀和】

    [CodeForces - 1225E]Rock Is Push [dp][前缀和] 标签:题解 codeforces题解 dp 前缀和 题目描述 Time limit 2000 ms Memory ...

  5. HDOJ 1423 Greatest Common Increasing Subsequence 【DP】【最长公共上升子序列】

    HDOJ 1423 Greatest Common Increasing Subsequence [DP][最长公共上升子序列] Time Limit: 2000/1000 MS (Java/Othe ...

  6. HDOJ 1501 Zipper 【DP】【DFS+剪枝】

    HDOJ 1501 Zipper [DP][DFS+剪枝] Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Ja ...

  7. HDOJ 1257 最少拦截系统 【DP】

    HDOJ 1257 最少拦截系统 [DP] Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...

  8. HDOJ 1159 Common Subsequence【DP】

    HDOJ 1159 Common Subsequence[DP] Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K ...

  9. HDOJ_1087_Super Jumping! Jumping! Jumping! 【DP】

    HDOJ_1087_Super Jumping! Jumping! Jumping! [DP] Time Limit: 2000/1000 MS (Java/Others) Memory Limit: ...

随机推荐

  1. swift 学习- 16 -- 构造过程 02

    // 类的继承 和 构造过程 // 类里面的所有的存储型属性 -- 包括所有继承自父类的属性 -- 都必须在构造过程中设置初始值 // Swift  为类类型提供了 两种构造器来确保实例中所有的存储属 ...

  2. 【MySql】join操作

    飞机票 飞机票 加油 INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录. LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录. RIGHT JOIN( ...

  3. ORACLE_修改实例的内存大小

    注:本文来源于:星火spark  <Oracle的实例占用内存调整> ORACLE_修改实例的内存大小 一:修改oracle数据库实例内存大小脚本 ---- 1.操作 (oracle使用内 ...

  4. 断路器Feign

    Feign是自带断路器,需要在配置文件中开启断路器 改造消费者项目(FeignDemo) 1.在application.yml配置文件中开启断路器 eureka: client: service-ur ...

  5. ERROR 1044 (42000): Access denied for user 'root'@'%' to database 'mysql'

    原因:修改数据库账号时删除了默认的localhost root,  新建了% root 但没有赋予全部权限; 解决方法: 1.关闭数据库# mysqld stop 2.在my.cnf里加入skip-g ...

  6. poj3164 最小树形图板子题

    /* 思路很简单,也不知道哪里错了TAT */ /* N个点通过笛卡尔坐标表示 根节点是1,求最小树形图 */ #include<iostream> #include<cstdio& ...

  7. bzoj 2721

    题解:首先推一发式子(见csdn https://blog.csdn.net/lleozhang/article/details/83415995) 因为x是整数,所以x的数量显然为能使取得整数的t的 ...

  8. Python笔记记录

    python2和python3的不同: Unicode(统一码.万国码),在3里面可以直接写中文了. python2里rae_input与python3中的input效果一样 在计算机内存中,统一用U ...

  9. C++ Primer 笔记——理解std::move

    标准库move函数是使用右值引用的模板的一个很好的例子.标准库是这样定义std::move的: template <typename T> typename remove_referenc ...

  10. VisualSVN Server如何安装和使用

    首先来下载和搭建SVN服务器. 现在Subversion已经迁移到apache网站上了,下载地址: http://subversion.apache.org/packages.html 这是二进制文件 ...