UVA1437 String painter】的更多相关文章

传送门 我们先考虑从一个空白串变成\(B\),这样的话用区间dp,区间dp,设\(f[l][r]\)表示区间\((l,r)\)的最小次数,当\(l==r\)时为\(1\),当\(s[l]==s[r]\)时为\(min(f[l][r-1],f[l+1][r])\),否则枚举断点\(k\),为\(min(f[l][k]+f[k+1][r])\) 然后考虑从\(A\)变成\(B\),设\(dp[i]\)表示\(A\)的前\(i\)个字母变成\(B\)的最小次数,一开始先设成\(f[1][i]\),如果…
String painter Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2520    Accepted Submission(s): 1134 Problem Description There are two strings A and B with equal length. Both strings are made up…
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=2476 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 c…
// uva live 4394 String painter // // 问题是,在培训指导dp运动主题,乍一看,我以为只是一点点复杂 // A A磕磕磕,两个半小时后,.发现超过例子.然而,鉴于他们跪在数据 // 还要wa.才发现,自己的方法是有问题的,假设是将两个串同一时候考虑 // 的话.比方: dp[i][j] 表示从i到j,s串刷成目标b串所须要的最小的花费 // 然后依据区间的端点的字符特点,进行状态转移.然而可能是我太搓了. // 发现这种状态转移是不正确的,比方edc和cde.…
String painter Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2792 Accepted Submission(s): 1272 Problem Description There are two strings A and B with equal length. Both strings are made up of lo…
题意 String painter Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 6669    Accepted Submission(s): 3230 Problem Description There are two strings A and B with equal length. Both strings are made…
题目: 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 o…
题目链接:https://vjudge.net/problem/HDU-2476 String painter Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 5023    Accepted Submission(s): 2375 Problem Description There are two strings A and B wit…
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.…
// uva live 4394 String painter // // 这一题是训练指南上dp专题的习题,初看之下认为仅仅是稍微复杂了一点 // 就敲阿敲阿敲,两个半小时后,发现例子过了.然而自己给出的数据跪了 // 交了也wa了,才发现,自己的方法是有问题的,假设是将两个串同一时候考虑 // 的话,比方: dp[i][j] 表示从i到j,s串刷成目标b串所须要的最小的花费 // 然后依据区间的端点的字符特点,进行状态转移,然而可能是我太搓了, // 发现这种状态转移是不正确的.比方edc和…
String painter Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2068    Accepted Submission(s): 908 Problem Description There are two strings A and B with equal length. Both strings are made up o…
题目 String painter 给出两个字符串s1,s2.对于每次操作可以将 s1 串中的任意一个子段变成另一个字符.问最少需要多少步操作能将s1串变为s2串. 解析 太妙了这个题,mark一下. 这个题先考虑怎么由空串转化s2, \(f[i][j]\)表示从空串到s2最少的次数, 则有\(f[i][j]=s[i+1][j]+1\), 若\([i+1,j]\)存在一个\(k\),使\(s2[i]==s2[k]\),则\(f[i][j]=min\{f[i+1][k]+f[k+1][j]\}\)…
http://acm.hdu.edu.cn/showproblem.php?pid=2476 String painter Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 6863    Accepted Submission(s): 3330 Problem Description There are two strings A and…
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.…
第一道区间dp题,感觉题意不是很好理解 题意:一次可以转换某一个位置的字符,或是一串连续的字符,举第一个例子zzzzzfzzzzz 1:aaaaaaaaaaa 2: abbbbbbbbba 3: abcccccccba 4: abcdddddcba 5: abcdeeedcba 6: abcdefedcba 于是第一个例子输出6,第二个同理 话不多说,直接贴一波代码 #include<cstdio> #include<iostream> #include<algorithm&…
题意:要把a串变成b串,每操作一次,可以使a串的[l,r]区间变为相同的一个字符.问把a变成b最少操作几次. 这题写法明显是区间dp ,关键是处理的方法. dp[l][r]表示b串的l~r区段至少需要刷几次.这个值直接在b串中讨论,不用考虑a串. 之后用一个数组ans[i]来帮助求答案,ans[i]表示把a串的[0,i]区段刷成b对应区段所刷的次数. #include<iostream> #include<string.h> using namespace std; ][]; #d…
题意:有一刷子,能将区间内涂成同一字母.给出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转的最小花…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2476 题目大意:给你字符串A.B,每次操作可以将一段区间刷成任意字符,问最少需要几次操作可以使得字符串A等于B.解题思路: 先计算出将空串刷成字符串B的最小操作数,再去计算将A串刷成B串的最小操作数. 设dp[i][j]表示将空串[i,j]刷成跟B串一样的最小操作次数,所以得到状态转移方程: dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]),(i<=k<j) i…
http://acm.hdu.edu.cn/showproblem.php?pid=2476 题目大意是给定一个起始串和一个目标串,然后每次可以将某一段区间染成一种字符,问从起始串到目标串最少需要染多少步? 读完题首先会想到的自然是用区间dp,但是列出来发现,没办法区间合并.因为一旦需要考虑对某一段成段染色的话,在区间合并的时候,就无法考虑转移过程中起始串的变化了. 既然这样,就不考虑成段染色造成的影响了,就当起始串和目标串处处不想等. 那么考虑区间[i, i+len], 自然遍历子区间[i, …
题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2395 题目大意:给定两个长度相等,只有小写字母组成的字符串s和t,每步可以把s的一个连续字串“刷“成同一个字母,问至少需要多少步才能把s变成t.比如:s = bbbbbbb, t = aaabccb,最少需要两步可实现将s变成t:bbbbbbb --> aaa…
#include <iostream> #include <algorithm> #include <cstring> #include <cstdio> #include <string> #include <map> #include <cmath> #include <vector> #define Faster ios::sync_with_stdio(false),cin.tie(0) #define…
https://www.bnuoj.com/v3/contest_show.php?cid=9149#problem/G [题意] 给定两个长度相同的字符串A,B.每次操作都能把A中的任意一个子段变成相同的字符,问最少操作多少次A能变成B? [思路] ***************************************************************************************************** dp[i][j]表示i-j区间内的最少次数…
其实这个dp过程有点似懂非懂...代码如下: #include <stdio.h> #include <algorithm> #include <string.h> using namespace std; + ; char a[N],b[N]; int dp[N][N]; int f[N]; int main() { ) == ) { ); scanf(); ;i<=n;i++) dp[i][i] = ; ;len<=n;len++) { ;i+len-&…
题意:给出两个串a和b,一次只能将一个区间刷一次,问最少几次能让a=b 思路:首先考虑最坏的情况,就是先将一个空白字符串刷成b需要的次数,直接区间DP[i][j]表示i到j的最小次数. 再考虑把a变成b的次数 ans[i]:a从(0,i)变成b(0,i)所需的最小次数 初始化ans[i]=dp[0][i] 如果a[i]==b[i],则ans[i]=ans[i-1]; 由小区间更新到大区间 //#pragma comment(linker, "/STACK:167772160")//手动…
题目大意: 给你两个串,有一个操作! 操作时可以把某个区间(L,R) 之间的所有字符变成同一个字符.现在给你两个串A,B要求最少的步骤把A串变成B串. 题目分析: 区间DP, 假如我们直接想把A变成B,那么我们DP区间的时候容易产生一个问题:假如我这个区间更新了,那么之前这个区间的子区间内DP出来的值就没用. 然后考虑到这里一直想不过去.最后看了看题解才知道. 我们可以先预处理一下怎么将一个空串变成B串需要的操作数. 这样我们就不用考虑子区间被覆盖的情况了. 如区间L,R 我们需要考虑的是点L是…
题意: 给定两个字符串,让求最少的变化次数从第一个串变到第二个串 思路: 区间dp, 直接考虑两个串的话太困难,就只考虑第二个串,求从空白串变到第二个串的最小次数,dp[i][j] 表示i->j这个区间上的最优解,那么dp[i][j] = min(dp[i + 1][j], dp[i + 1][k] + dp[k + 1][j]),这个状态转移方程中是枚举k的位置,前提是第二个串的第i个字符必须和第k个字符相等,因为这样才是求的最优的,不然的话,就没必要刷到k这个位置了.到最后在枚举每个位置,看…
这题搞了很久很久..弄得我都不想放上来了,但是想了想还是写上来吧,万一以后忘了怎么做了,又得搞很久很久了.题目是要求把一个字符串变成另外一个,每次可以选择一段字符串变成同一个字符,问最少用变多少次.本来想的更复杂,写了半天一直wa,后来发现自己想错了,,一不小心看到了kuangbin大牛说可以先由空串转化成b串.然后我想了一下,发现的确可以这样,这样就可以在由空串转化成b串的基础上判断a串与b串的区别,然后就可以得到由a串转化成b串的ans了.但是由空串转化成b串的时候假如b串是:acbdaef…
HDU - 2476 思路:分解问题,先考虑从一个空串染色成 B串的最小花费 ,区间DP可以解决这个问题 具体的就是,当 str [ l ] = = str [ r ]时 dp [ L ] [ R ] = min (dp [ L + 1] [ R ],dp [ L ] [ R-1 ] ) 其他情况可以选择任意一个断点 tmp = min ( tmp , dfs ( l  ,k ) + dfs ( k+1 , r ) ); 接下来就是第二步 现在A串不是空串 ,但然把它当做空串去染是没有问题的,…
传送门 https://www.cnblogs.com/violet-acmer/p/9852294.html 题意: 给定字符串A,B,每次操作可以将字符串A中区间[ i , j ]的字符变为ch,问最少需要多少次操作可以使 A == B. 题解: 这道题,卡了我好久好久,这期间也尝试用了一些骚操作,然而并没有什么卵用,无奈之举,百度找了巨巨的博客看. 看了三四篇博客,在经过自己的纠结,终于弄懂了. 首先,这道题需要经过两次DP: ① : 第一次是求出将空字符串 S 变为 B 所需的最少操作,…
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2476 题目大意: 给出两个等长的串S, T, 要将S变成T, 每次可以把S的连续的一段变成相同的字母,求最少操作数. 这题网上看了好多题解,理解了好久, 记录一下我的理解吧. 首先求出把空串变成T的最少次数. dp[i][j] 表示把空串变成T[i ... j]的最少次数. 首先dp[i][j] = dp[i + 1][j]. 然后有一个性质.如果两次染色的区间有交, 那么小的区间一定完全包含于大…