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的更多相关文章

  1. hdu 2476 (string painter) ( 字符串刷子 区间DP)

    String painter Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  2. hdu 2476 区间dp

    题意: 给出两个串s1和s2,一次只能将一个区间刷一次,问最少几次能让s1=s2 例如zzzzzfzzzzz,长度为11,我们就将下标看做0~10 先将0~10刷一次,变成aaaaaaaaaaa 1~ ...

  3. HDU 2476 区间DP String painter

    题解 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm ...

  4. String painter (hdu 2476 DP好题)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2476 题目大意: 给出两个等长的串S, T, 要将S变成T, 每次可以把S的连续的一段变成相同的字母 ...

  5. HDU 2829 区间DP & 前缀和优化 & 四边形不等式优化

    HDU 2829 区间DP & 前缀和优化 & 四边形不等式优化 n个节点n-1条线性边,炸掉M条边也就是分为m+1个区间 问你各个区间的总策略值最少的炸法 就题目本身而言,中规中矩的 ...

  6. hdu 4283 区间dp

    You Are the One Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

  7. HDU 4293---Groups(区间DP)

    题目链接 http://acm.split.hdu.edu.cn/showproblem.php?pid=4293 Problem Description After the regional con ...

  8. HDU 4632 区间DP 取模

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4632 注意到任意一个回文子序列收尾两个字符一定是相同的,于是可以区间dp,用dp[i][j]表示原字 ...

  9. hdu 4632(区间dp)

    Palindrome subsequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65535 K (Java/ ...

随机推荐

  1. dubbo接口demo开发

    接口需求 客户端输入uncleyong(当然,也可以输入其它字符串),服务端返回hello uncleyong 开发环境 jdk + idea + maven + zookeeper jdk安装 id ...

  2. Dubbo2.6.5入门——简单的HelloWorld

    建立父工程 打开idea,新建一个空的maven工程,作为整个项目的父工程. <?xml version="1.0" encoding="UTF-8"?& ...

  3. 计算pi的位数

    from random import random from math import sqrt from time import clock DARTS=1000000 hits=0.0 clock( ...

  4. 2019南昌邀请赛网络预选赛 J.Distance on the tree(树链剖分)

    传送门 题意: 给出一棵树,每条边都有权值: 给出 m 次询问,每次询问有三个参数 u,v,w ,求节点 u 与节点 v 之间权值 ≤ w 的路径个数: 题解: 昨天再打比赛的时候,中途,凯少和我说, ...

  5. 支持向量机(SVM)举例

    例(1) 无核(No kernel or linear kernel) 代码和数据集来自于https://github.com/fengdu78/Coursera-ML-AndrewNg-Notes ...

  6. openstack项目【day23】:keystone组件HTTP协议

    阅读目录 一 为何要学习HTTP协议 二 用户上网过程 三 HTTP协议 part1 http协议概述 part2 请求协议 part3 响应协议 四 抓包分析HTTP协议 一 为何要学习HTTP协议 ...

  7. Hadoop记录-queue mysql

    #!/bin/sh ip=10.116.100.11 port=8088 export HADOOP_HOME=/app/hadoop/bin rmstate1=$($HADOOP_HOME/yarn ...

  8. Object is not a function

    如图报了一个这样的错,百度好多都说是函数名和html元素重名的问题.可是这个问题我想我这里是不存在的 可以看到就一个绑定事件,而且id名不是关键字 报错是在$.ajax这一行,索性就把submit-i ...

  9. <锋利的jQuery>读书笔记

  10. 关于使用python ~取反操作符带出的一系列问题

    晚上的时候,无意之间看到stackoverflow上面的一个编程挑战赛,各路高手各种搞事,看到python的地方突然发现用了很多位运算的符号,但是~符号引起了我和同事的注意. 我们很少在程序中使用这种 ...