String painter (hdu 2476 DP好题)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2476
题目大意:
给出两个等长的串S, T, 要将S变成T, 每次可以把S的连续的一段变成相同的字母,求最少操作数。
这题网上看了好多题解,理解了好久, 记录一下我的理解吧。
首先求出把空串变成T的最少次数。
dp[i][j] 表示把空串变成T[i ... j]的最少次数。
首先dp[i][j] = dp[i + 1][j].
然后有一个性质。如果两次染色的区间有交, 那么小的区间一定完全包含于大的区间(左右端点也不会重合), 且一定是大区间 在小区间之前染色(否则 小区间完全被覆盖 就没用了)。
如果不是这样, 可以改造一下区间 变成这样。
所以第一次染色 一定是[i, k], 然后T[k + 1, j]可以单独考虑(因为染色不能再和[i, k]有交了)。
那么如何选这个k呢?
只要考虑T[i] = T[k]的位置, 如果不是,可以调整染色区域长度 变成右端点的颜色和 T[i]一样。
然后有另外一个性质:
如果T[i] = T[j], dp[i][j] = dp[i + 1][j]. 只要第一次染色区域选择[i, j], 就可以和dp[i + 1][j] 对应起来。
综上 dp[i][j] = min{dp[i + 1][j] + 1, dp[i + 1][k] + dp[k][j] (T[i] == T[k]) }
最后根据dp数组再做一次DP。
ans[i] 表示考虑S[1 ... i] T[1 ... i]
如果S[i] == T[i] 显然ans[i] = ans[i - 1]
否则肯定有一段S的区间[k ... i] 都被刷子刷过。 那么这一段的情况就是dp[k][i].
所以ans[i] = min(ans[k] + dp[k + 1][i]).
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <cmath>
#include <map>
#include <queue>
#include <set>
using namespace std; #define X first
#define Y second
#define N 110
#define M 500010 typedef long long ll;
const int INF = << ;
const int Mod = ; char s[N], t[N];
int dp[N][N], ans[N]; int main()
{
//freopen("in.in", "r", stdin);
//freopen("out.out", "w", stdout); while (scanf("%s %s", s + , t + ) != EOF)
{
int n = strlen(s + );
for (int i = ; i <= n; ++i) dp[i][i] = ;
for (int len = ; len <= n; ++len)
{
for (int i = ; i + len - <= n; ++i)
{
int j = i + len - ;
dp[i][j] = dp[i + ][j] + ;
for (int k = i + ; k <= j; ++k)
if (t[i] == t[k]) dp[i][j] = min(dp[i][j], dp[i + ][k] + dp[k + ][j]);
}
}
ans[] = (s[] != t[]);
for (int i = ; i <= n; ++i)
{
if (s[i] == t[i]) ans[i] = ans[i - ];
else
{
ans[i] = dp[][i];
for (int k = ; k < i; ++k)
ans[i] = min(ans[i], ans[k] + dp[k + ][i]);
}
}
printf("%d\n", ans[n]);
} return ;
}
String painter (hdu 2476 DP好题)的更多相关文章
- String painter HDU - 2476 -区间DP
HDU - 2476 思路:分解问题,先考虑从一个空串染色成 B串的最小花费 ,区间DP可以解决这个问题 具体的就是,当 str [ l ] = = str [ r ]时 dp [ L ] [ R ] ...
- HDU 2476 String painter(区间DP)
String painter Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- HDOJ 题目2474 String painter(区间DP)
String painter Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- String painter(区间DP)
There are two strings A and B with equal length. Both strings are made up of lower case letters. Now ...
- String painter (区间dp)
There are two strings A and B with equal length. Both strings are made up of lower case letters. Now ...
- HDU 2476 String painter (区间DP)
题意:给出两个串a和b,一次只能将一个区间刷一次,问最少几次能让a=b 思路:首先考虑最坏的情况,就是先将一个空白字符串刷成b需要的次数,直接区间DP[i][j]表示i到j的最小次数. 再考虑把a变成 ...
- hdu 2845(dp基础题)
题意:容易理解. 分析:以后碰到这种类型的题,就要考虑把矩阵先按行来处理,再按列处理.先算出每行能够能够得到的最大值,然后按列处理即可. 代码实现: #include<stdio.h> # ...
- You Are Given a Decimal String... CodeForces - 1202B [简单dp][补题]
补一下codeforces前天教育场的题.当时只A了一道题. 大致题意: 定义一个x - y - counter :是一个加法计数器.初始值为0,之后可以任意选择+x或者+y而我们由每次累加结果的最后 ...
- UVALive 4394 String painter ——(区间DP)
其实这个dp过程有点似懂非懂...代码如下: #include <stdio.h> #include <algorithm> #include <string.h> ...
随机推荐
- 基于Thrift的跨语言、高可用、高性能、轻量级的RPC框架
功能介绍 跨语言通信 方便的使Java.Python.C++三种程序可以相互通信 负载均衡和容灾处理 方便的实现任务的分布式处理 支持服务的水平扩展,自动发现新的服务节点 能够兼容各种异常情况,如节点 ...
- com.apple.installer.pagecontroller 错误 -1 pkg安装错误
在网上下载了一个pkg 的安装文件: 在mac上安装一打就出现错误 原因是,文件从网上直接下载的,会出权限问题,需要修复安装软件的安装权限: 我的原因是,下载的是个rar的mac解压不了,就在线解压, ...
- win7远程凭据无法工作
由于上周过度用脑之后没有清空内存,导致脑容量不够用,办了件傻事,但是傻人有傻福,从中收获了很多, 这个错误可以这样形容,就是从哪里开始,就从哪里结束,好了,开始正文(以win8系统为例) 想要远程某一 ...
- 算法笔记_060:蓝桥杯练习 出现次数最多的整数(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 编写一个程序,读入一组整数,这组整数是按照从小到大的顺序排列的,它们的个数N也是由用户输入的,最多不会超过20.然后程序将对这个数组进行统 ...
- python处理xls、xlsx格式excle
一.windows下读取xls格式文件,所需模块xlrd.xlw 1.下载安装包 xlrd地址:https://pypi.org/project/xlrd/#files xlwt地址:https:// ...
- unity3d创建window
unity3d创建windwo的方法如下: GUILayout.Window (, new Rect (50, 50, 200, 100), Func1, "窗口1"); 第一个参 ...
- angularJS 状态样式绑定
angularJS提供输入框不同状态下的样式绑定 输入框有4种状态 ng-model 指令可以为应用数据提供状态值(invalid, dirty, touched, error): <!DOCT ...
- php_memcahed 使用方法
用php_memcache.dll 扩展库操作方法 1.下载php_memcache.dll 对应的PHP版本拷贝到PHP目录EXT下 2.在php.ini添加扩展extension=php_memc ...
- Application Request Route实现IIS Server Farms集群负载详解(转)
http://www.cnblogs.com/knowledgesea/p/5099893.html http://www.cnblogs.com/smileberry/p/4300849.html
- mysql-group-replication 测试环境的搭建与排错
mysql-group-replication 是由mysql-5.7.17这个版本提供的强一致的高可用集群解决方案 1.环境规划 主机ip 主机名 172.16.192.201 balm001 17 ...