hdoj2476 String painter
题意:有一刷子,能将区间内涂成同一字母。给出src,dst串,问最少涂几次?
用dp[i][j]表示区间[i,j]内最少涂的次数。len=1,2时很明显。len=3时,dp[i][j]要么就在dp[i][j-1]的基础上多涂一次,要么和[i,j-1]中某个和它同字母的一起涂。设第k个和j一样,那么就是dp[i][k-1]+dp[k][j-1]中的最小。
以上是空串转dst串。src转dst时,len=1的时候很明显,如果那个字和dst不一样,就是1,否则0。res[i][j]表示src转的最小花费。n>=2时,从[i,j]中找断点,如果src[k]==dst[k]那么res[i][j]可能为res[i][k-1]+res[k+1][j]。当然,也有可能不利用区间[i,j]中任何一个相等的,这时就是dp[i][j]。
#pragma comment(linker,"/STACK:1024000000,1024000000")
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<vector>
#include<cmath>
#include<queue>
#include<stack>
#include<map>
#include<set>
#include<algorithm>
#include <stack>
using namespace std;
const int SZ=1e2+,INF=0x7FFFFFFF;
typedef long long lon;
string src,dst;
int dp[SZ][SZ],res[SZ][SZ]; void init()
{
for(int len=;len<=dst.size();++len)
{
for(int i=;i<dst.size();++i)
{
int r=i+len-;
if(r>=dst.size())break;
dp[i][r]=dp[i][r-]+;
for(int k=i;k<r;++k)
{
if(dst[k]==dst[r])dp[i][r]=min(dp[i][r],dp[i][k-]+dp[k][r-]);
}
}
}
//cout<<dp[1]
for(int len=;len<=dst.size();++len)
{
for(int i=;i<dst.size();++i)
{
int r=i+len-;
if(r>=dst.size())break;
res[i][r]=dp[i][r];
for(int j=i;j<=r;++j)
{
if(src[j]==dst[j])res[i][r]=min(res[i][r],res[i][j-]+res[j+][r]);
}
}
}
cout<<res[][dst.size()-]<<endl;
} int main()
{
std::ios::sync_with_stdio();
int casenum;
//cin>>casenum;
for(int time=;cin>>src>>dst;++time)
{
init();
}
return ;
}
hdoj2476 String painter的更多相关文章
- HDOJ 题目2474 String painter(区间DP)
String painter Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- hdu2476 String painter(区间dp)
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=2476 Problem Description There are two strings ...
- uva live 4394 String painter 间隔dp
// uva live 4394 String painter // // 问题是,在培训指导dp运动主题,乍一看,我以为只是一点点复杂 // A A磕磕磕,两个半小时后,.发现超过例子.然而,鉴于他 ...
- HDU 2476 String painter(区间DP)
String painter Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- HDU2476 String painter
题意 String painter Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- 刷题总结——String painter(hdu2476)
题目: Problem Description There are two strings A and B with equal length. Both strings are made up of ...
- HDU2476 String painter —— 区间DP
题目链接:https://vjudge.net/problem/HDU-2476 String painter Time Limit: 5000/2000 MS (Java/Others) Me ...
- String painter(区间DP)
There are two strings A and B with equal length. Both strings are made up of lower case letters. Now ...
- uva live 4394 String painter 区间dp
// uva live 4394 String painter // // 这一题是训练指南上dp专题的习题,初看之下认为仅仅是稍微复杂了一点 // 就敲阿敲阿敲,两个半小时后,发现例子过了.然而自己 ...
随机推荐
- 20155305乔磊2016-2017-2《Java程序设计》第五周学习总结
20155305乔磊2016-2017-2<Java程序设计>第五周学习总结 教材学习内容总结 try.catch 1.求平均数程序示例 import java.util.Scanner; ...
- javashop组件开发指南
javashop组件开发指南 1. 概念解释 组件:可以理解为是插件,功能点的一个集合. 插件:是指具体的某个功能. 插件桩:是负责调用插件. 事件:是要决定什么时候执行插件 一个组件是由多 ...
- windows下nodejs express安装及入门网站,视频资料,开源项目介绍
windows下nodejs express安装及入门网站,视频资料,开源项目介绍,pm2,supervisor,npm,Pomelo,Grunt安装使用注意事项等总结 第一步:下载安装文件下载地址: ...
- 浅谈class私有变量
class 的前世今生 在 es6 之前,虽然 JS 和 Java 同样都是 OOP (面向对象)语言,但是在 JS 中,只有对象而没有类的概念. 在 JS 中,生成实例对象的传统方法是通过构造函数, ...
- Redis 如何正确实现分布式锁
前言 分布式锁一般有三种实现方式:1. 数据库乐观锁:2. 基于Redis的分布式锁:3. 基于ZooKeeper的分布式锁.本篇博客将介绍第二种方式,基于Redis实现分布式锁.虽然网上已经有各种介 ...
- NFS常用命令
1.客户端查看服务端可挂载卷 showmount -t 服务端IP 2.不重启加载NFS配置文件 exportfs -avr
- VC++使用IMAPI调用Outlook邮箱客户端和Foxmail邮箱客户端遇到的问题
http://www.cnblogs.com/abiao/articles/303090.html 发送邮件 MAPISendMail() 发送邮件功能就是对MAPISendMail()的封装.下面解 ...
- 关于Qt跨线程调用IO子类的理解
一.疑问 突然想到,类似于QTcpsocket和QSerialport这类对象,如果是在A线程中new的,那就不能在其他线程中访问.我一般是这样做的: 封装一个QObject子类,放这些对象进去,然后 ...
- 【前端】纯html+css+javascript实现楼层跳跃式的页面布局
实现效果演示: 实现代码及注释: <!DOCTYPE html> <html> <head> <title>楼层跳跃式的页面布局</title&g ...
- Python3基础 函数 未指定返回值,返回NONE
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...