题意:有一刷子,能将区间内涂成同一字母。给出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的更多相关文章

  1. HDOJ 题目2474 String painter(区间DP)

    String painter Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  2. hdu2476 String painter(区间dp)

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=2476 Problem Description There are two strings ...

  3. uva live 4394 String painter 间隔dp

    // uva live 4394 String painter // // 问题是,在培训指导dp运动主题,乍一看,我以为只是一点点复杂 // A A磕磕磕,两个半小时后,.发现超过例子.然而,鉴于他 ...

  4. HDU 2476 String painter(区间DP)

    String painter Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...

  5. HDU2476 String painter

    题意 String painter Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  6. 刷题总结——String painter(hdu2476)

    题目: Problem Description There are two strings A and B with equal length. Both strings are made up of ...

  7. HDU2476 String painter —— 区间DP

    题目链接:https://vjudge.net/problem/HDU-2476 String painter Time Limit: 5000/2000 MS (Java/Others)    Me ...

  8. String painter(区间DP)

    There are two strings A and B with equal length. Both strings are made up of lower case letters. Now ...

  9. uva live 4394 String painter 区间dp

    // uva live 4394 String painter // // 这一题是训练指南上dp专题的习题,初看之下认为仅仅是稍微复杂了一点 // 就敲阿敲阿敲,两个半小时后,发现例子过了.然而自己 ...

随机推荐

  1. Java线程基础知识(状态、共享与协作)

    1.基础概念 CPU核心数和线程数的关系 核心数:线程数=1:1 ;使用了超线程技术后---> 1:2 CPU时间片轮转机制 又称RR调度,会导致上下文切换 什么是进程和线程 进程:程序运行资源 ...

  2. Openstack创建虚拟机 Restful api和RPC调用

    Horizon前台界面用于接受用户的输入或动作(action),然后将这些参数构造成RESTful API(https://developer.openstack.org/api-ref/comput ...

  3. 【基于EF Core的Code First模式的DotNetCore快速开发框架】完成对DB First代码生成的支持

    前言 距离上一篇文章<基于EF Core的Code First模式的DotNetCore快速开发框架>已过去大半个年头,时光荏苒,岁月如梭...比较尴尬的是,在这大半个年头里,除了日常带娃 ...

  4. Collection体系

  5. 01: vue.js安装

    1.1 vue.js安装与基本使用 官网:https://cn.vuejs.org/ 1.使用之前,我们先来掌握3个东西是用来干什么的 1. npm: Nodejs下的包管理器. 2. webpack ...

  6. UVa 1471 Defense Lines - 线段树 - 离散化

    题意是说给一个序列,删掉其中一段连续的子序列(貌似可以为空),使得新的序列中最长的连续递增子序列最长. 网上似乎最多的做法是二分查找优化,然而不会,只会值域线段树和离散化... 先预处理出所有的点所能 ...

  7. 使用ShellExecute打开默认程序(邮件客户端)

    转载:http://www.cnblogs.com/xubin0523/archive/2012/11/01/2749729.html ShellExecute ShellExecute的功能是运行一 ...

  8. Linux多线程--使用信号量同步线程【转】

    本文转载自:http://blog.csdn.net/ljianhui/article/details/10813469 信号量.同步这些名词在进程间通信时就已经说过,在这里它们的意思是相同的,只不过 ...

  9. vim的个性化配置- 再谈vim的折叠和展开 -- 彻底掌握vim 的展开和折叠!

    http://www.wklken.me/posts/2016/02/03/some-vim-configs.html 一般把 设置成 逗号, 是比较好的, 因为逗号比默认的leader  要方便键入 ...

  10. [SpringBoot] - 发送带附件的邮件

    <!--发送email依赖--> <dependency> <groupId>org.springframework.boot</groupId> &l ...