题意:

给出两个串s1和s2,一次只能将一个区间刷一次,问最少几次能让s1=s2

例如zzzzzfzzzzz,长度为11,我们就将下标看做0~10

先将0~10刷一次,变成aaaaaaaaaaa

1~9刷一次,abbbbbbbbba

2~8:abcccccccba

3~7:abcdddddcba

4~6:abcdeeedcab

5:abcdefedcab

这样就6次,变成了s2串了

其 实如果a串是空串的话,我们可以写出这样的区间dp方程:设dp[i][j]表示从i到j至少要变多少次,则有dp[i][j]=min(dp[i+1] [j]+(b[i]==b[j]?0:1),dp[i+1][k]+dp[k+1][j](b[i]==b[k]))。

然后再考虑a串,设f[i]表示使a[0]~~a[i]==b[0]~~b[i]的最小步数,则有f[i]=min(f[j]+dp[j+1][i],dp[0][i],f[i-1](当a[i]==b[i]时)),即[j+1,i]可以看做一个空串。

if(b[i]==b[k])
     dp[i][j]=min(dp[i][j],dp[i+1][k]+dp[k+1][j]);

如果b[i]==b[k]  那么刷b[k]的时候一定会顺便刷上b[i] ,则可以少刷一次

2015-07-19:专题训练

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<algorithm>
 4 #include<cstring>
 5 #include<cmath>
 6 #include<queue>
 7 #include<map>
 8 using namespace std;
 9 #define MOD 1000000007
10 const int INF=0x3f3f3f3f;
11 const double eps=1e-5;
12 typedef long long ll;
13 #define cl(a) memset(a,0,sizeof(a))
14 #define ts printf("*****\n");
15 const int MAXN=1005;
16 int n,m,tt;
17 char a[MAXN],b[MAXN];
18 int dp[MAXN][MAXN];
19 int ans[MAXN];
20 int main()
21 {
22     int i,j,k;
23     #ifndef ONLINE_JUDGE
24     freopen("1.in","r",stdin);
25     #endif
26     while(scanf("%s%s",a,b)!=EOF)
27     {
28         int len=strlen(a);
29         cl(dp);
30         for(i=0;i<len;i++)  dp[i][i]=1;
31         for(int d=1;d<len;d++)
32         {
33             for(i=0;i+d<len;i++)
34             {
35                 j=i+d;
36                 dp[i][j]=dp[i+1][j]+1;
37                 for(k=i+1;k<=j;k++)
38                 {
39                     if(b[k]==b[i])
40                         dp[i][j]=min(dp[i][j],dp[i+1][k]+dp[k+1][j]);
41                 }
42             }
43         }
44         for(i=0;i<len;i++)
45         {
46             ans[i]=dp[0][i];
47         }
48         for(i=0;i<len;i++)
49         {
50             if(a[i]==b[i])
51             {
52                 if(i==0)    ans[i]=0;
53                 else ans[i]=ans[i-1];
54             }
55             else
56             {
57                 for(j=0;j<i;j++)
58                 {
59                     ans[i]=min(ans[i],ans[j]+dp[j+1][i]);
60                 }
61             }
62         }
63         printf("%d\n",ans[len-1]);
64     }
65 }

View Code

2015-05-10:

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<algorithm>
 4 #include<cstring>
 5 #include<cmath>
 6 #include<queue>
 7 #include<map>
 8 using namespace std;
 9 #define MOD 1000000007
10 const int INF=0x3f3f3f3f;
11 const double eps=1e-5;
12 typedef long long ll;
13 #define cl(a) memset(a,0,sizeof(a))
14 #define ts printf("*****\n");
15 const int MAXN=1005;
16 int n,m,tt;
17 char a[MAXN],b[MAXN];
18 int dp[MAXN][MAXN];
19 int ans[MAXN];
20 int main()
21 {
22     int i,j,k;
23     #ifndef ONLINE_JUDGE
24     freopen("1.in","r",stdin);
25     #endif
26     while(scanf("%s%s",a,b)!=EOF)
27     {
28         int n=strlen(a);
29         cl(dp);
30         for(i=0;i<n;i++)    dp[i][i]=1;
31         for(int len=1;len<n;len++)
32         {
33             for(i=0;i+len<=n;i++)
34             {
35                 j=i+len;
36                 dp[i][j]=dp[i+1][j]+1;
37                 for(k=i+1;k<=j;k++)
38                 {
39                     if(b[i]==b[k])
40                         dp[i][j]=min(dp[i][j],dp[i+1][k]+dp[k+1][j]);
41                 }
42             }
43         }
44         for(i=0;i<n;i++)
45         {
46             ans[i]=dp[0][i];
47         }
48         for(i=0;i<n;i++)
49         {
50             if(a[i]==b[i])
51             {
52                 if(i==0)    ans[i]=0;
53                 else ans[i]=ans[i-1];
54             }
55             else
56             {
57                 for(j=0;j<i;j++)
58                 {
59                     ans[i]=min(ans[i],ans[j]+dp[j+1][i]);
60                 }
61             }
62         }
63         printf("%d\n",ans[n-1]);
64     }
65 }

转载于:https://www.cnblogs.com/cnblogs321114287/p/4269890.html

hdu 2476 区间dp相关推荐

  1. Palindrome subsequence HDU - 4632 区间dp|记忆化搜索

    // 区间dp import java.util.Scanner;/**** @author CN*/ public class main {static int mod = 10007;static ...

  2. The 2014 ACM-ICPC BeiJing D - Dire Wolf HDU - 5115 区间dp

    题意 n个狼 排成一排 我们要把一排狼都删除掉 删除一个狼的花费是这个狼的权值和左右两个狼的附加值 求最小花费 分析 考虑区间dp dp[i][j]表示i到j的最小花费 我们可以枚举其中的k 为序列中 ...

  3. hdu 4745 区间dp

    题意:求一个环的最长回文序列,是序列不是串 链接:点我 起点是可以任意的, 所以只要求出每个区间的最长回文序列之后取max(dp[1][i]+dp[i+1][n]),即可得最终答案 本来是想扩展两倍的 ...

  4. You Are the One HDU - 4283 区间DP

    https://cn.vjudge.net/problem/HDU-4283 题目大意n个人轮流上台,第i个人有一个屌丝值Di 当他为第k个上台的人时候会获得屌丝值(K-1)*Di, 这些人轮流上台, ...

  5. hdu 5115 区间dp 狼BUFF

    题目大意:你是一个战士现在面对,一群狼,每只狼都有一定的主动攻击力和附带攻击力.你杀死一只狼.你会受到这只狼的(主动攻击力+旁边两只狼的附带攻击力)这么多伤害~现在问你如何选择杀狼的顺序使的杀完所有狼 ...

  6. HDU 2476 String painter (区间DP)

    题意:给出两个串a和b,一次只能将一个区间刷一次,问最少几次能让a=b 思路:首先考虑最坏的情况,就是先将一个空白字符串刷成b需要的次数,直接区间DP[i][j]表示i到j的最小次数. 再考虑把a变成 ...

  7. HDU 5115 Dire Wolf 区间dp

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5115 Dire Wolf Time Limit: 5000/5000 MS (Java/Others ...

  8. HDU 5693 D Game 区间dp

    D Game 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5693 Description 众所周知,度度熊喜欢的字符只有两个:B 和D. 今天,它 ...

  9. hdu 4597 + uva 10891(一类区间dp)

    题目链接:http://vjudge.net/problem/viewProblem.action?id=19461 思路:一类经典的博弈类区间dp,我们令dp[l][r]表示玩家A从区间[l, r] ...

最新文章

  1. 适配器模式(三种)简单使用
  2. java 取得textfield_怎样获取java中textfield的内容
  3. dex文件结构(二):dex文件加载基本原理
  4. 100题_22 整数的二进制表示中1的个数
  5. 给Event handler传递动态参数
  6. canvas学习绘制扇形
  7. boost::geometry::geometry_id用法的测试程序
  8. windows Navicat Premium连接oracle
  9. 实现仿简书选取内容生成分享图片效果
  10. 微机笔记2——8086/8088指令系统
  11. Android判断App是否在前台运行
  12. matlab中做出球面和圆柱面,MATLAB中的柱面与球面
  13. OpenNESS,开源的边缘网络服务平台
  14. 水果店营业额下降原因,水果店如何提高营业额
  15. 百宝云Web网络验证系统防破解设置
  16. linux 合并多个pdf,Linux 下合并 PDF
  17. 操作系统—CPU调度与内存管理
  18. linux 部署 程序,Linux 部署配置WEB APP
  19. android usb 流程
  20. Appium TestNg Maven Android Eclipse java简单启动实例

热门文章

  1. Pygal简单使用——模拟掷骰子
  2. windows下使用word2vec训练维基百科中文语料全攻略!(三
  3. 最全面超大规模数据集下载链接汇总(转)
  4. Spyder清除Variable Explorer手动安装protobuf3.0(为了配置windows的python接口)
  5. 复练-软考高级-论文写作专题
  6. 7系统启动到一半停止_扛不住了!可口可乐巨震:500个品牌砍一半,裁员4000人.........
  7. python文件的路径_如何从目录中给出python文件的路径
  8. 拼接图像亮度均匀调整_品质不变 价格更香 | 爆款拼接屏新品上市
  9. c语言string函数的用法_同一个函数的五六个版本,C++string insert函数详解
  10. arm架构和x86架构_ARM、X86和MIPS主流架构优缺点分析