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专题的习题,初看之下认为仅仅是稍微复杂了一点 // 就敲阿敲阿敲,两个半小时后,发现例子过了.然而自己 ...
随机推荐
- python 展开嵌套的序列
将一个多层嵌套的序列展开成一个单层列表 可以写一个包含yield from 语句的递归生成器来轻松解决这个问题. from collections import Iterable def flatte ...
- 并发写Btree原理剖析
OceanBase 0.4的UpdateServer存储引擎使用了一棵可以多线程并发修改的BTree,读写不冲突,由颜然 开发.线上运行稳定. UpdateServer存储引擎采用类leveldb的方 ...
- python六剑客:map()、lambda()、filter()、reduce()、推导类表、切片
一:map():映射 map()有两个参数,一个函数,一个序列,序列中每一个元素都会做为参数传给前边的函数,然后生成新的列表, 第二个参数必须用一个序列:元祖,列表,字符串 >>> ...
- MYSQL的存储过程和函数简单写法
存储过程 MySQL中,创建存储过程的基本形式如下: CREATE PROCEDURE sp_name ([proc_parameter[,...]]) [characteristic ...] ro ...
- c++标准之于gcc/vc/boost等实现相当于jsr规范之于sunjdk/ibmjdk/tomcat/weblogic等实现
春节放假期间,一直在学习c++,越想越发现c++标准之于gcc/vc/boost等实现相当于jsr规范之于sunjdk/ibmjdk/tomcat/weblogic等实现
- 车载项目问题解(memset)
1memset函数解 1.void *memset(void *s,int c,size_t n) 总的作用:将已开辟内存空间 s 的首 n 个字节的值设为值 c.2.例子 #includevoid ...
- 串口WIF简单I调试
串口WIF简单I调试 /*********************************************************************** Title:Wifi串口调试 H ...
- 关键字union
union有一个作用就是判断,pc是大端存储还是小端存储的,x86是小端存储的,这个东西是有cpu决定的.arm(由存储器控制器决定)和x86一样都是小端的. 下面的是一个大端小端的一个例子,代码如下 ...
- IDEA开发常用快捷键
以下快捷键均为初始快捷键,可以进行自定义. 查询快捷键CTRL+N 查找类 CTRL+SHIFT+N 查找文件 CTRL+SHIFT+ALT+N 查找类中的方法或变量 CIRL+B 找变量的 ...
- Python3基础 tuple 通过拆分元素 把元组的数据删除
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...