HDU 2476 String painter(区间dp)

原创 2015年07月10日 10:40:15

String painter

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


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
 

Recommend

/*

题意:将第一个字符串转化为第二个字符串最少步数(每一步可以将一个区间变成一种颜色)

思路: 先假设两个串完全不同涂色,也就是dp[i][j]代表b串i~j完全不同涂色的最小步数
      然后ans[i]记录第一个串前i个字符全部涂成b钱i个字符的步数
      那么当来了b 一个字符 如果相等那么ana[i]=min(dp[0][i],ans[i-1])
      然后还可能是前面任意一个涂好的ans[j] 再见过dp[j+1][i]而来


*/


#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
#include<stack>
#include<vector>
#include<set>
#include<map>

#define L(x) (x<<1)
#define R(x) (x<<1|1)
#define MID(x,y) ((x+y)>>1)

#define eps 1e-8
typedef __int64 ll;

using namespace std;

#define N 105

int dp[N][N],s[N];
char a[N],b[N];

int main()
{
	int i,j;
	while(~scanf("%s",a))
	{
		scanf("%s",b);
		memset(dp,0,sizeof(dp));
		int len=strlen(b);

        for(i=0;i<len;i++)
			dp[i][i]=1;

		for(i=len-1;i>=0;i--)
		  for(j=i+1;j<len;j++)
		  {
		  	 dp[i][j]=dp[i+1][j]+1;

		  	 for(int k=i+1;k<=j;k++)
				if(b[i]==b[k])
			 {
			 	dp[i][j]=min(dp[i][j],dp[i+1][k]+dp[k+1][j]);
			 }

		  }

		for(i=0;i<len;i++)
		{
			s[i]=dp[0][i];
			if(a[i]==b[i])
			{
				if(i==0)
				  s[i]=0;
				else
				  s[i]=s[i-1];
			}
			else
			 for(int k=0;k<i;k++)
		          s[i]=min(s[i],s[k]+dp[k+1][i]);
		}
		printf("%d\n",s[len-1]);
	}
	return 0;
}





版权声明:本文为博主原创文章,未经博主允许不得转载。

String painter HDU - 2476 好几天都无法理解的区间dp

There are two strings A and B with equal length. Both strings are made up of lower case letters. Now...
  • YCQ_Lancet
  • YCQ_Lancet
  • 2017年11月14日 10:25
  • 54

区间DP 入门经典三道题

NYOJ 737:http://acm.nyist.net/JudgeOnline/problem.php?pid=737 代码:#include #include #include #def...
  • SolarDomo
  • SolarDomo
  • 2016年08月15日 14:17
  • 478

HDOJ 2476 - String painter 不是所有的区间DP都方便用记忆化搜索..

题意:                      给了两个长度相同的串(长度不超过100..且仅含小写字母)..现在需要让第一个串变成第二个串...可以做的操作是将一片连续的区域变成相同的字母..问最...
  • kk303
  • kk303
  • 2013年10月09日 15:39
  • 733

几个经典的贪心区间问题之区间调度hdu2037

说在前面 今天打了场比赛有个很简单的区间贪心问题写得磕磕绊绊,因此深感几个经典的区间贪心问题还是应该重新看看并加以总结形成模板。这种问题就应该像大神们那样十几分钟内稀里哗啦的敲出来。 A.区间调度...
  • qq_35495556
  • qq_35495556
  • 2016年07月26日 00:19
  • 518

String painter(DP综合题:区间DP(两次DP))

Link:http://acm.hdu.edu.cn/showproblem.php?pid=2476 String painter Time Limit: 5000/20...
  • Enjoying_Science
  • Enjoying_Science
  • 2015年10月14日 11:55
  • 519

区间DP入门之 石子归并问题

题目描述:有N堆石子排成一排,每堆石子有一定的数量。现要将N堆石子并成为一堆。合并的过程只能每次将相邻的两堆石子堆成一堆,每次合并花费的代价为这两堆石子的和,经过N-1次合并后成为一堆。求出总的代价最...
  • wuxuanyi27
  • wuxuanyi27
  • 2016年04月21日 21:40
  • 847

动态规划学习系列——区间DP(一)

学习一个算法,还是从题目开始比较好,我们就从一道经典例题开始: wikioi 1048 石子归并 Description 有n堆石子排成一列,每堆石子有一个重量w[i], 每次合并可以合并相...
  • fuyukai
  • fuyukai
  • 2015年02月13日 17:13
  • 801

dp 计数问题 复杂整数划分 区间dp

百练的题目 : 让我对dp有了新体会 这是记忆化搜索写法 省了很多时间 并且状态转移的方式符合我们的认知  这个通过递推很难发现关系 但是讲区间搜索一下分解的话就可以计数了 并且在不影响结果的前提下自...
  • qq_34271269
  • qq_34271269
  • 2016年07月19日 21:32
  • 347

hdu 数位DP汇总 + hdu 4507 题解

基础教学 + 初探hdu2089题解:http://blog.csdn.net/techmonster/article/details/50273967 进阶 【重要模板】(数位dp几乎都是这个模板)...
  • Techmonster
  • Techmonster
  • 2015年12月13日 16:55
  • 593

线段树 hdu5700 区间交

传送门:点击打开链接 题意:有n个区间,求k个区间,使得这k个区间相交的区间内数字之和最大。数列的数字均>=0 思路:通常这种题目我们都会先按照区间的右区间位置排序。之后的步骤如果想到了,就会变得...
  • qwb492859377
  • qwb492859377
  • 2016年05月23日 10:45
  • 1181
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:HDU 2476 String painter(区间dp)
举报原因:
原因补充:

(最多只允许输入30个字)