区间DP-刷字符问题-思维考察

翻译了一下这个题,一看还是有点难以入手,标明了是区间DP问题,但是如何DP呢

来捋一捋思路吧

dp[i][j]肯定是从i刷到j所要的次数但是它的i和j是s1串还是s2串呢,怎么能把两个串结合起来考虑呢,这是一个问题,它的转移方程是什么呢

没有想到先去考虑母串的情况

是啊dp[i][j]用来分析母串确实好做一些,从i到j的刷去次数初始赋值dp[i][j] = dp[i+1][j] + 1 直接暴力,然后在寻找中间有没有和i指向的当前这个元素相同的值,如果有的话就可以优化去见了没有的话,就是按照暴力的方法来进行

所以也可以知道对i的遍历我们要你序遍历才可以

这里对k循环的时候要注意是针对第i个元素的优化操作,具体看代码注释

memset(dp,0,sizeof(dp));

        for(int j = 0;j < len;j++)//尾巴
{
for(int i = j;i >= 0;i--)
{
dp[i][j] = dp[i + 1][j] + 1;//先一个一个暴力刷
//这里针对的第i个元素
for(int k = i+1;k <= j;k++)
{
if(s2[i] == s2[k])//因为有相同的了嘛可以拼起来刷了所以这里考虑的i不刷
dp[i][j] = min(dp[i][j],dp[i+1][k] + dp[k+1][j]);
}
}
}

接下来就是结合s1寻找最优解了

先初始化一波

        for(int i = 0;i < len;i++)
ans[i] = dp[0][i];

然后再遍历一遍,存在相等的好办,ans[i] = ans[i-1];,表示这个可以不染

对于不相等的位置,尝试找一个间断点,去寻找最小染法

 for(int i = 0;i < len;i++)
{
if(s1[i] == s2[i])
ans[i] = ans[i-1];
else
{
for(int j = 0;j < i;j++)
{
ans[i] = min(ans[i],ans[j] + dp[j+1][i]);
}
}
}

这种情况只能说,能理解代码了但是自己想确实没有能轻松相出一个比较有效的解决办法

HDU 2476 区间DP-刷字符问题-思维考察的更多相关文章

  1. String painter HDU - 2476 -区间DP

    HDU - 2476 思路:分解问题,先考虑从一个空串染色成 B串的最小花费 ,区间DP可以解决这个问题 具体的就是,当 str [ l ] = = str [ r ]时 dp [ L ] [ R ] ...

  2. hdu 2476 区间dp

    题意: 给出两个串s1和s2,一次只能将一个区间刷一次,问最少几次能让s1=s2 例如zzzzzfzzzzz,长度为11,我们就将下标看做0~10 先将0~10刷一次,变成aaaaaaaaaaa 1~ ...

  3. HDU 2476 区间DP String painter

    题解 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm ...

  4. hdu 4283 区间dp

    You Are the One Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

  5. HDU 2829 区间DP & 前缀和优化 & 四边形不等式优化

    HDU 2829 区间DP & 前缀和优化 & 四边形不等式优化 n个节点n-1条线性边,炸掉M条边也就是分为m+1个区间 问你各个区间的总策略值最少的炸法 就题目本身而言,中规中矩的 ...

  6. HDU 4293---Groups(区间DP)

    题目链接 http://acm.split.hdu.edu.cn/showproblem.php?pid=4293 Problem Description After the regional con ...

  7. HDU 4632 区间DP 取模

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4632 注意到任意一个回文子序列收尾两个字符一定是相同的,于是可以区间dp,用dp[i][j]表示原字 ...

  8. 2016 ACM/ICPC Asia Regional Shenyang Online 1009/HDU 5900 区间dp

    QSC and Master Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) ...

  9. HDU 4570(区间dp)

    E - Multi-bit Trie Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u ...

随机推荐

  1. svn冲突问题解决办法

    经常有人会说,树冲突是很难解决的一类冲突,其实一旦了解了其原理,要解决也不难.先回顾下对于树冲突的定义.     树冲突:当一名开发人员移动.重命名.删除一个文件或文件夹,而另一名开发人员也对它们进行 ...

  2. LibreOJ #6002. 「网络流 24 题」最小路径覆盖

    #6002. 「网络流 24 题」最小路径覆盖 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:Special Judge 上传者: 匿名 提交提交记录统计讨论测 ...

  3. Window7安装tensorflow整套环境详细流程

    安装tensorflow方式有好多种,为了方便编译环境以及包管理,这里采用Anaconda平台安装tensorflow. tensorflow官网:http://www.tensorflow.org/ ...

  4. Notepad++语言格式设置,自定义扩展名关联文件格式

    简单粗暴--直接上图

  5. ContactDetail 和 ContactEditor 界面头像响应点击过程

    1,联系人详情界面 ContactDetailFragment中处理,ViewAdapter装载数据显示头像 private final class ViewAdapter extends BaseA ...

  6. (转贴)fusionCharts属性参考API

    一.FusionCharts的分类 关于FusionCharts的基本介绍我就不在这里浪费篇幅了,想了解的朋友自己去www.baigoogedu.com里面找吧.我就说说FusionCharts的官方 ...

  7. Hibernate validator的一些额外特性

    分组验证及分组顺序 如果我们想在新增的情况验证id和name,而修改的情况验证name和password,怎么办? 那么就需要分组了. 首先定义分组接口://分组接口就是两个普通的接口,用于标识,类似 ...

  8. TensorFlow安装时错误CondaValueError: prefix already exists: G:\softs\Anaconda\envs\tensorflow

    TensorFlow安装时,TensorFlow环境已经调好了,就是下面的第(3)步, 可我自己偏偏选了个Python3.7,因为检测到自己的Python最新版本为3.7,就手贱安了TensorFlo ...

  9. 【Redis】安装及简单使用

    Redis介绍 Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库. Redis 与其他 key - value 缓存产品有以下三个特点: Redis支持数据的持久化 ...

  10. IIS Web服务器日志、日志服务器分析

    IIS Web服务器日志.日志服务器分析 EventLog Analyzer是一款全面的工具,用于审计.管理和跟踪您的Microsoft Internet Information Services(I ...