HDU 2476 区间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-刷字符问题-思维考察的更多相关文章
- String painter HDU - 2476 -区间DP
HDU - 2476 思路:分解问题,先考虑从一个空串染色成 B串的最小花费 ,区间DP可以解决这个问题 具体的就是,当 str [ l ] = = str [ r ]时 dp [ L ] [ R ] ...
- hdu 2476 区间dp
题意: 给出两个串s1和s2,一次只能将一个区间刷一次,问最少几次能让s1=s2 例如zzzzzfzzzzz,长度为11,我们就将下标看做0~10 先将0~10刷一次,变成aaaaaaaaaaa 1~ ...
- HDU 2476 区间DP String painter
题解 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm ...
- hdu 4283 区间dp
You Are the One Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- HDU 2829 区间DP & 前缀和优化 & 四边形不等式优化
HDU 2829 区间DP & 前缀和优化 & 四边形不等式优化 n个节点n-1条线性边,炸掉M条边也就是分为m+1个区间 问你各个区间的总策略值最少的炸法 就题目本身而言,中规中矩的 ...
- HDU 4293---Groups(区间DP)
题目链接 http://acm.split.hdu.edu.cn/showproblem.php?pid=4293 Problem Description After the regional con ...
- HDU 4632 区间DP 取模
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4632 注意到任意一个回文子序列收尾两个字符一定是相同的,于是可以区间dp,用dp[i][j]表示原字 ...
- 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) ...
- HDU 4570(区间dp)
E - Multi-bit Trie Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u ...
随机推荐
- Numpy copy & deep copy
1. '='的赋值方式会带有关联性 >>> import numpy as np >>> a = np.arange(4) >>> b = a & ...
- *jquery操作DOM总结 (原创:最全、最系统、实例展示)
jquery操作DOM包括八个方面: 一:jquery对DOM节点的基本操作:二:jquery对DOM节点的CSS样式操作:三:jquery遍历DOM节点:四:jquery创建DOM节点:五:jque ...
- BZOJ1047或洛谷2216 [HAOI2007]理想的正方形
BZOJ原题链接 洛谷原题链接 显然可以用数据结构或\(ST\)表或单调队列来维护最值. 这里采用单调队列来维护. 先用单调队列维护每一行的最大值和最小值,区间长为正方形长度. 再用单调队列维护之前维 ...
- UI设计教程分享:让你彻底读懂字体
一份普普通通.规规矩矩的设计 一份让人印象深刻.新颖有趣的设计 差在哪?其实就差在三个字上! “优秀的设计不是每一个细节都有亮点,而是弱化其他元素,让某一个亮点最大化.” 今天“骉叔的设计心得”就来总 ...
- Docker虚拟化实战学习——基础篇(转)
Docker虚拟化实战学习——基础篇 2018年05月26日 02:17:24 北纬34度停留 阅读数:773更多 个人分类: Docker Docker虚拟化实战和企业案例演练 深入剖析虚拟化技 ...
- MySQL 索引 INDEX
索引用于快速找出在某列中有特定值的行. 不使用索引,MySQL必须从第一条记录开始读完整个表,直到找到相关的行,表越大,查询数据所花费的时间就越多,如果表中查询的列有一个索引,MySQL能够快速到达一 ...
- [ES]elasticsearch章3 ES写入过程解析
Elasticsearch的写 Elasticsearch采用多Shard方式,通过配置routing规则将数据分成多个数据子集,每个数据子集提供独立的索引和搜索功能.当写入文档的时候,根据routi ...
- linux中命令突然不能用
先用:echo $PATH 发现path丢失:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin 于是用临时环境变量 export ...
- kbmMW均衡负载与容灾(3)(转载红鱼儿)
在kbmMW均衡负载与容灾(1)中,介绍了利用ClientTransport的OnReconnect事件,对联接的应用服务器的地址进行更换,做容灾处理.实际上,作者还给我们提供了另外一种机制,直接在C ...
- python中的特殊成员
python中的特殊成员: 小甲鱼论坛总结