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 ...
随机推荐
- 796B Find The Bone
B. Find The Bone time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...
- 转~Jenkins pipeline:pipeline 使用之语法详解
一.引言 Jenkins 2.0的到来,pipline进入了视野,jenkins2.0的核心特性. 也是最适合持续交付的feature. 简单的来说,就是把Jenkins1.0版本中,Project中 ...
- 20172306《Java程序设计与数据结构》第八周学习总结
20172306<Java程序设计>第8周学习总结 教材学习内容总结 第十章最开始自己看的时候,没怎么看懂,等老师讲完之后,又看了一遍,就理解了很多.第十章主要学习了以下几点: 1.对于几 ...
- 适合新手小白的UI学习路线完整版
UI设计是很多年轻人活着想转行学习的人的新职业目标,越来越多的人看到UI设计良好的就业发展前景,纷纷投入到UI设计的大军中来,想学习UI设计,很多小白并不知道从何开始学起,用什么样的方法去学习,所以今 ...
- 社交类APP原型模板分享——QQ
QQ是一款社交类的APP应用——聊天软件,支持多人群聊以及丰富有趣的娱乐功能. 此模板交互效果很丰富,主要有抽屉侧拉效果,滚动内容界面.标签组切换.选择组件触发按钮状态变化.点击下拉展开列表.点击弹出 ...
- python 日志滚动 分文件
import logging from logging.handlers import RotatingFileHandler import datetime import os def main() ...
- 重新学pytorch
安装: conda install pytorch -c pytorch pip3 install torchvision pip install torchtext 这3个命令就够了
- dubbo学习(zz)
dubbo学习 博客分类: 开源软件 Dubbo是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站 ...
- python输出格式对齐问题
采用.format打印输出时,可以定义输出字符串的输出宽度,在 ':' 后传入一个整数, 可以保证该域至少有这么多的宽度. 用于美化表格时很有用. >>> table = {'Goo ...
- viewer.js使用
viewer GitHub 地址: JS 版本:https://github.com/fengyuanchen/viewerjs jQuery 版本:https://github.com/fengyu ...