String painter HDU - 2476 -区间DP
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串不是空串 ,但然把它当做空串去染是没有问题的,
但是现在有可能出现 A串有些部分与B串是相同的,所以会减少一些花费,定义 f 为到此为止由A转化为B的最小花费
那么我们就一个一个字符的来看,min ( f [ j ] + dp [ j ] [ i ] ) ( j < i ),当 A [ i ] = = B [ i ] 时多一个选择 f [ i - 1 ] 直接转移过来
#include<bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
#define maxn 123
int ans,len,f[maxn];
int dp[maxn][maxn],n;
char str[maxn],son[maxn];
int dfs(int l,int r)
{
if(l==r) dp[l][r]=1;
if(dp[l][r]!=-1)return dp[l][r];
int tmp=inf;
if(str[l]==str[r])
tmp=min(dfs(l,r-1),dfs(l+1,r));
else
for(int k=l; k<r; k++)
tmp=min(tmp,dfs(l,k)+dfs(k+1,r));
return dp[l][r]=tmp;
}
int main()
{
while(~scanf("%s%s",son,str))
{
memset(dp,-1,sizeof(dp));
int len=strlen(str);
dfs(0,len-1);
for(int i=0; i<len; i++)
{
f[i]=dp[0][i];
for(int j=0; j<i; j++)
f[i]=min(f[j]+dp[j+1][i],f[i]);
if(son[i]==str[i])
if(i==0)f[i]=0;
else f[i]=min(f[i],f[i-1]);
}
printf("%d\n",f[len-1]);
}
return 0;
}
String painter HDU - 2476 -区间DP的更多相关文章
- hdu 2476 (string painter) ( 字符串刷子 区间DP)
String painter Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- hdu 2476 区间dp
题意: 给出两个串s1和s2,一次只能将一个区间刷一次,问最少几次能让s1=s2 例如zzzzzfzzzzz,长度为11,我们就将下标看做0~10 先将0~10刷一次,变成aaaaaaaaaaa 1~ ...
- HDU 2476 区间DP String painter
题解 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm ...
- String painter (hdu 2476 DP好题)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2476 题目大意: 给出两个等长的串S, T, 要将S变成T, 每次可以把S的连续的一段变成相同的字母 ...
- HDU 2829 区间DP & 前缀和优化 & 四边形不等式优化
HDU 2829 区间DP & 前缀和优化 & 四边形不等式优化 n个节点n-1条线性边,炸掉M条边也就是分为m+1个区间 问你各个区间的总策略值最少的炸法 就题目本身而言,中规中矩的 ...
- hdu 4283 区间dp
You Are the One Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- HDU 4293---Groups(区间DP)
题目链接 http://acm.split.hdu.edu.cn/showproblem.php?pid=4293 Problem Description After the regional con ...
- HDU 4632 区间DP 取模
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4632 注意到任意一个回文子序列收尾两个字符一定是相同的,于是可以区间dp,用dp[i][j]表示原字 ...
- hdu 4632(区间dp)
Palindrome subsequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65535 K (Java/ ...
随机推荐
- STM32的IO口是如何配置为某个外设使用的 ---?
@2019-03-01 [猜想] 使用片内外设功能: 首先将对应 IO 口配置为复用输出 其次是 IO 口对应的多个功能外设,哪个外设使能即将外设与 IO 口相连 [疑问] 若多个外设都使能,那么到底 ...
- GO语言系列(五)- 结构体和接口
结构体(Struct) Go中struct的特点 1. 用来自定义复杂数据结构 2. struct里面可以包含多个字段(属性) 3. struct类型可以定义方法,注意和函数的区分 4. struct ...
- PyQt5之窗口类型
[TOC] 注:原创不易,转载请务必注明原作者和出处,感谢支持! 一 写在开头 1.1 本文内容 本文的主要内容:PyQt中的窗口部件:QMainWindow,QWidget,QDialog. 上述三 ...
- gitlab升级迁移(二)
前面我们写了一篇gitlab升级迁移的文章(https://www.cnblogs.com/liangyou666/p/9434158.html),这次我们主要是讲另一种升级迁移方法和其中遇到的一些问 ...
- Vue Material
Material Design是什么? https://www.zhihu.com/topic/20005114/top-answers 我们挑战自我,为用户创造了崭新的视觉设计语言.与此同时,新的设 ...
- VIM --使用进阶 -- 插件篇 -- YouCompleteMe -- nerdtree
系统:ubuntu: 资源:https://github.com/ 其他:想了解都要哪些好用的插件,推荐大家读 http://blog.csdn.net/mergerly/article/detail ...
- 牛牛与数组 (简单dp)
题目链接 这种题一看就是dp啊,dp[i][j]表示第i位放j的方案数,转移方程为dp[i][j]=dp[i-1][k]{k<=i||k%i!=0},当然我们可以三层循环来找,但数据显然会超时, ...
- JAVA进阶12
间歇性混吃等死,持续性踌躇满志系列-------------第12天 1.字符串的概述和特点 java.lang.String类代表字符串 API当中说,Java程序中所有的字符串字面值(如“abc& ...
- 《css网站布局实录》(李超)——读书札记
1.web表现层技术 2.HTML链接设计思想 3.对信息进行合理的分析.分类与处理来创造商业价值. 4.头部描述浏览器所需信息,主体包含所需要展现的具体内容. 5.HTML(XHTML)XML 6. ...
- JS媒体查询
样式的改变使用C3的媒体查询 行为和功能的改变使用JS的媒体查询 matchMedia()方法参数可写任何一个CSS@media规则,返回的是新的MediaQueryList对象,该对象有两个属性 m ...