博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hdu 2476 String painter (区间DP)
阅读量:5309 次
发布时间:2019-06-14

本文共 970 字,大约阅读时间需要 3 分钟。

题目链接:

  

题目描述:

  给出两个长度相同的字符串a, b.对a可以进行区间更新(选择一个区间,把这个区间全部更新成相同的字符),问要最少操作a多少次,a才能等于b?

解题思路:

  区间DP真是神奇!人有多大胆,地有多大产!刚开始的时候就一直在想a和b怎么匹配,怎么状态转移求最小?想了一下午,wa了一下午········。

  最后搜了一下题解发现是先处理一下b串,然后再对a串进行状态转移。对于串b,最要是看两个相同字符之间的区间了。我们可以预处理出来改变区间[x, y]里面的字符,操作的最小次数用dp[x, y]来存储。
  预处理完了以后,我们就可以用dp来匹配a了。ans[i] 表示 a字符区间[0, i] 与 b字符区间[0, i]相同的最小操作数目。状态转移就是:ans[i] = min (dp[0, i], ans[j] + dp[j+1][i], ans[i-1](a[i] == b[i]))

1 #include 
2 #include
3 #include
4 #include
5 #include
6 using namespace std; 7 typedef long long LL; 8 const int INF = 0x3f3f3f3f; 9 const int maxn = 110;10 11 int dp[maxn][maxn], ans[maxn];12 char a[maxn], b[maxn];13 14 int main ()15 {16 while (scanf ("%s %s", a, b) != EOF)17 {18 memset (dp, 0, sizeof(dp));19 int len = strlen (b);20 for (int i=0; i

 

转载于:https://www.cnblogs.com/alihenaixiao/p/4934027.html

你可能感兴趣的文章
变量提升
查看>>
线性表可用顺序表或链表存储的优缺点
查看>>
在现有的mysql主从基础上,搭建mycat实现数据的读写分离
查看>>
[Flex] flex手机项目如何限制横竖屏?只允许横屏?
查看>>
tensorflow的graph和session
查看>>
JavaScript动画打开半透明提示层
查看>>
Mybatis生成resulteMap时的注意事项
查看>>
jquery-jqzoom 插件 用例
查看>>
1007. Maximum Subsequence Sum (25)
查看>>
iframe的父子层跨域 用了百度的postMessage()方法
查看>>
图片生成缩略图
查看>>
动态规划 例子与复杂度
查看>>
查看oracle数据库的连接数以及用户
查看>>
【数据结构】栈结构操作示例
查看>>
中建项目环境迁移说明
查看>>
三.野指针和free
查看>>
activemq5.14+zookeeper3.4.9实现高可用
查看>>
TCP/IP详解学习笔记(3)IP协议ARP协议和RARP协议
查看>>
简单【用户输入验证】
查看>>
python tkinter GUI绘制,以及点击更新显示图片
查看>>