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专题的习题,初看之下认为仅仅是稍微复杂了一点 // 就敲阿敲阿敲,两个半小时后,发现例子过了.然而自己 ...
随机推荐
- json-lib基础
一.json-lib所需的jar包: json-lib.jar,commons-beanutils.jar,commons-collections.jar,commons-lang.jar,commo ...
- python 爬虫煎蛋网
import urllib.request import os from urllib import error import re import base64 def url_open(url): ...
- 处理内容有&特殊字符thinkphp返回xml无法解析的问题<![CDATA[xxx]]>
处理内容有&特殊字符thinkphp返回xml无法解析的问题<![CDATA[xxx]]> // xml 转义特殊字符 如&'" <![CDATA[&quo ...
- Java系列笔记(0) - 目录和概述
笔者在开发过程中发现自己基础太薄弱,读书时除了系统学习了一下Java的基础语法和用法.一点简单的数据结构和设计模式之外,再无深入系统的学习,而工作中的学习也是东晃一枪西晃一枪,不够扎实和系统.想到一个 ...
- UVA756 Biorhythms
UVA756 Biorhythms crt crt裸题 因为模数已知所以有些值能直接求 #include<iostream> #include<cstdio> using na ...
- c++ 11和java 8都支持lambda表达式
c++ 11居然都支持lambda表达式了,看了这确实是有必要了. 具体可见http://www.cprogramming.com/c++11/c++11-lambda-closures.html
- vijos & codevs 能量项链 - 动态规划
描述 在Mars星球上,每个Mars人都随身佩带着一串能量项链.在项链上有N颗能量珠.能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数.并且,对于相邻的两颗珠子,前一颗珠子的尾标记一定等于 ...
- C++ compile Microsoft Visual C++ Static and Dynamic Libraries
出处:http://www.codeproject.com/Articles/85391/Microsoft-Visual-C-Static-and-Dynamic-Libraries 出处:http ...
- openwrt的编译方法
1.获取最新包 ./scripts/feeds update -a 2.安装包 ./scripts/feeds install -a 3.配置 make menuconfig 4.编译 make -j ...
- fhq treap抄袭笔记
目录 碎碎念 点一下 注意!!! 模板 fhq treap 碎碎念 我咋感觉合并这么像左偏树呢 ps:难道你们的treap都是小头堆的吗 fhq真的是神人 现在看以前学的splay是有点恶心,尤其是压 ...