hdu 2476 (string painter) ( 字符串刷子 区间DP)
String painter
Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 2068 Accepted Submission(s): 908
are two strings A and B with equal length. Both strings are made up of
lower case letters. Now you have a powerful string painter. With the
help of the painter, you can change a segment of characters of a string
to any other character you want. That is, after using the painter, the
segment is made up of only one kind of character. Now your task is to
change A to B using string painter. What’s the minimum number of
operations?
The first line contains string A.
The second line contains string B.
The length of both strings will not be greater than 100.
abcdefedcba
abababababab
cdcdcdcdcdcd
7
最优子结构无后效性,如果状态设计不合理,会导致有后效性。
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
char a[],b[];
int dp[][],d[];
int Length;
void init()
{
memset(dp,,sizeof(dp));
memset(d,,sizeof(d));
for(int i=;i<Length;i++)
dp[i][i]=; }
void solve()
{
/* for(int i=0;i<Length;i++)
for(int j=0;j<Length;j++)
for(int k=i;k<=j;k++)
{
dp[i][j]=min(DP(dp[i][k]+dp[k+1][j]),dp[i][j]);
}
for(int s=0;s<Length;s++)
{
for(int j=0;j<Length;j++)
printf("%d ",dp[s][j]);
printf("\n");
}
printf("2\n");
printf("%d\n",dp[0][Length-1]);
*/
for(int t=;t<Length;t++)
for(int i=;i<Length;i++)
{
int j=i+t;
if(j>=Length)
break;
dp[i][j]=dp[i][j-]+;
for(int k=i;k<j;k++)
{
if(b[k]==b[j]) //如果目标串有相同的,就可以一同处理
dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+][j-]);
}
} for(int i=;i<Length;i++)
d[i]=dp[][i];
for(int i=;i<Length;i++)
{
if(a[i]==b[i])
d[i]=d[i-];
else
{
for(int k=;k<i;k++)
d[i]=min(d[i],d[k]+dp[k+][i]);
} }
}
int main()
{
//freopen("test.txt","r",stdin);
while(~scanf("%s%s",a,b))
{
Length=strlen(a);
init();
solve();
printf("%d\n",d[Length-]);
}
return ;
}
hdu 2476 (string painter) ( 字符串刷子 区间DP)的更多相关文章
- HDU 2476 String painter (区间DP)
题意:给出两个串a和b,一次只能将一个区间刷一次,问最少几次能让a=b 思路:首先考虑最坏的情况,就是先将一个空白字符串刷成b需要的次数,直接区间DP[i][j]表示i到j的最小次数. 再考虑把a变成 ...
- HDU 2476 String painter(区间DP)
String painter Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- HDU 2476 String painter(区间dp)
题意: 给定两个字符串,让求最少的变化次数从第一个串变到第二个串 思路: 区间dp, 直接考虑两个串的话太困难,就只考虑第二个串,求从空白串变到第二个串的最小次数,dp[i][j] 表示i->j ...
- HDU 2476 String painter(记忆化搜索, DP)
题目大意: 给你两个串,有一个操作! 操作时可以把某个区间(L,R) 之间的所有字符变成同一个字符.现在给你两个串A,B要求最少的步骤把A串变成B串. 题目分析: 区间DP, 假如我们直接想把A变成B ...
- hdu 2476 String Painter
第一道区间dp题,感觉题意不是很好理解 题意:一次可以转换某一个位置的字符,或是一串连续的字符,举第一个例子zzzzzfzzzzz 1:aaaaaaaaaaa 2: abbbbbbbbba 3: ab ...
- HDU 2476 String painter 刷字符串(区间DP)
题意: 给出两个串s1和s2,每次可以将s1中的一个整个区间刷成同个字母,问最少刷几次才能让s1变成s2? 思路: 假设最坏情况,两串没任何一个位置是相同的,那么全都得刷,相当于将一个空白串刷成s2. ...
- HDU 2476 String painter(区间DP+思维)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2476 题目大意:给你字符串A.B,每次操作可以将一段区间刷成任意字符,问最少需要几次操作可以使得字符串 ...
- hdu 2476"String painter"(区间DP)
传送门 https://www.cnblogs.com/violet-acmer/p/9852294.html 题意: 给定字符串A,B,每次操作可以将字符串A中区间[ i , j ]的字符变为ch, ...
- 【HIHOCODER 1320】压缩字符串(区间DP)
描述 小Hi希望压缩一个只包含大写字母'A'-'Z'的字符串.他使用的方法是:如果某个子串 S 连续出现了 X 次,就用'X(S)'来表示.例如AAAAAAAAAABABABCCD可以用10(A)2( ...
随机推荐
- bzoj5108 [CodePlus2017]可做题 位运算dp+离散
[CodePlus2017]可做题 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 87 Solved: 63[Submit][Status][Dis ...
- eclipse pom.xml 报错org.apache.maven.plugin.war.WarMojo的解决办法
如题,maven项目eclipse提示pom.ml有错,提示信息就是org.apache.maven.plugin.war.WarMojo. 然后执行 maven install 出现如下错误提示 [ ...
- 【Codeforces Round #501 (Div. 3)】
A:https://www.cnblogs.com/myx12345/p/9842904.html B:https://www.cnblogs.com/myx12345/p/9842964.html ...
- msp430入门编程45
msp430中C语言的人机交互--独占CPU菜单
- 实验二:编写输出“Hello word!”
一:编写输出“Hello word!” 1.运行eclipse,在project name中输入要创建的项目名称. 2.创建java类,点击File->New->Class,在弹出窗口中N ...
- 北京交大yum
[base] name=CentOS-$releasever - Base #mirrorlist=http://mirrorlist.centos.org/?release=$releasever& ...
- Python pandas学习笔记
参考文献:<Python金融大数据分析> #导入模块 import pandas as pd #生成dataframe df = pd.DataFrame([10,20,30,40], c ...
- 【转】apache storm 内置的定时机制
原文:http://www.cnblogs.com/kqdongnanf/p/4778672.html ------------------------------------------------ ...
- 2003-07-16T01:24:32Z这是什么时间格式
这是标准的XML Schema的"日期型数据格式”. T是代表后面跟着“时间”.Z代表0时区,或者叫UTC统一时间. 世界的每个地区都有自己的本地时间,在Internet及无线电通信时,时间 ...
- webpack-Modules(模块)
模块(Modules) 在模块化编程中,开发者将程序分解成离散功能块(discrete chunks of functionality),并称之为模块. 每个模块具有比完整程序更小的接触面,使得校验. ...