# String painter

Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 3530    Accepted Submission(s): 1640

Problem Description
There 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?

Input
Input contains multiple cases. Each case consists of two lines:
The first line contains string A.
The second line contains string B.
The length of both strings will not be greater than 100.

Output
A single line contains one integer representing the answer.

Sample Input
zzzzzfzzzzz abcdefedcba abababababab cdcdcdcdcdcd

Sample Output
6 7

Source
2008 Asia Regional Chengdu

毫无疑问是区间dp,但是怎么写出表达式是一个很严肃的问题o(￣▽￣)do(￣▽￣)do(￣▽￣)d

由空串修改成第二串这个区间dp还是很好写的，个人觉得下面的那个转化才是神奇。
空串转化第二串，度娘给我的那个确实不错，但是我估计比较笨，想不到那种转化。
当然学习一下还是非常有必要的，说不定什么时候用上了呢。。

for(j = 0; j<len; j++)
{
for(i = j; i>=0; i--)//j为尾，i为头
{
dp[i][j] = dp[i+1][j]+1;//先每个单独刷
for(k = i+1; k<=j; k++)//i到j中间所有的刷法
{
if(s2[i]==s2[k])
dp[i][j] = min(dp[i][j],(dp[i+1][k]+dp[k+1][j]));//i与k相同，寻找i刷到k的最优方案
}
}
}  

 for(int len=2;len<=n;len++)
{
for(int l=0;l+len-1<n;l++)
{
int r=l+len-1;
if(s[l]==s[l+1])
dp[l][r]=dp[l+1][r];
else if(s[r]==s[r-1])
dp[l][r]=dp[l][r-1];
else if(s[l]==s[r])
{
dp[l][r]=dp[l+1][r-1]+1;
for(int k=1;k<r;k++)
if(s[l]==s[k])
dp[l][r]=min(dp[l][r],dp[l][k]+dp[k][r]-1);
}
for(int k=l;k<r;k++)
{
dp[l][r]=min(dp[l][r],dp[l][k]+dp[k+1][r]);
}
}
}

      for(int i=0;i<n;i++)
res[i]=dp[0][i];

for(int i=0;i<n;i++)
{
if(s[i]==s1[i])
{
if(i==0)
res[i]=0;
else
res[i]=res[i-1];
}
else
{
for(int j=0;j<i;j++)
res[i]=min(res[i],res[j]+dp[j+1][i]);
}
}

ans[i]代表的是[0,i]的最小转化步数。

• 本文已收录于以下专栏：

## hdu 2476 String painter 动态规划

• a601025382s
• 2013年10月07日 13:10
• 3049

## hdu 2476 String painter dp

• a601025382s
• 2014年07月13日 11:36
• 499

## HDU2476：String painter(区间DP)

Problem Description There are two strings A and B with equal length. Both strings are made up of low...
• libin56842
• 2013年08月02日 00:36
• 5263

## 【HDU2476】【String painter】

String painter Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...
• u013200703
• 2015年08月05日 00:07
• 512

## hdu 2476 String painter

String painter Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...
• overload1997
• 2016年10月16日 19:49
• 200

## HDU - 2476 String painter

• u011345136
• 2013年12月21日 18:22
• 1135

## hdu 2476 String painter

String painter Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...
• u010228612
• 2014年07月04日 22:08
• 791

## HDU 2476 String painter

#include #include #include using namespace std; #define maxn 110 int dp[maxn][maxn]; int g[maxn]...
• u011277193
• 2014年06月04日 21:15
• 381

## String painter HDU - 2476 区间dp+思维

• zmh69695328
• 2017年08月12日 21:56
• 83

## （HDU - 2476）String painter

（HDU - 2476）String painter There are two strings A and B with equal length. Both strings are made up...
• wozaipermanent
• 2017年08月23日 15:31
• 101

举报原因： 您举报文章：hdu 2476 String painter(区间qp) 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)