题目地址:http://vjudge.net/problem/UVALive-4394

很明显的区间DP

区间DP的套路就是 d[i][j]的在区间 (i,j) 刷的次数

转移也一般是 d[i][j]->d[i][k]+d[k+1][j]; 也就是一个区间分成两个区间

那么对于这道题就是想想怎么转移,也就是怎么将一个区间转移成两个区间

d[i][j]->d[i][k]+d[k+1][j];

1. if t[i]==t[j]  ,也就是i刷到j

2. if t[i]==t[k+1]  ,也就是i刷到k+1

3  if t[k]==t[j]  ,也就是k刷到j

4. 什么也不干

还应该保存刷的颜色,所以多加一维paint

d[i][j][p] 就表示区间(i,j) 且刷了p的次数

#include <bits/stdc++.h>
using namespace std;
#define REP(i,a,b)  for(int i=a;i<=(int)(b);++i)
#define REPD(i,a,b) for(int i=a;i>=(int)(b);--i)
const int INF=0x3f3f3f3f;
char s[100+5],t[100+5];
int d[100+5][100+5][35];
int DP(int i,int j,int paint){if(i>j) return 0;int& ans=d[i][j][paint];if(ans!=-1) return ans;if(i==j) {if(t[i]-'a'==paint||(paint==30&&t[i]==s[i])) return 0;else return 1;}ans=j-i+1;if(t[i]==t[j]) ans=min(ans,DP(i+1,j-1,t[i]-'a')+(paint!=t[i]-'a'));REP(k,i,j){if(t[i]==t[k]) ans=min(ans,DP(i+1,k-1,t[i]-'a')+DP(k+1,j,paint)+(paint!=t[k]-'a'));if(t[k]==t[j]) ans=min(ans,DP(i,k-1,paint)+DP(k+1,j-1,t[k]-'a')+(paint!=t[k]-'a'));ans=min(ans,DP(i,k,paint)+DP(k+1,j,paint));  //什么也不干} return ans;
}
int main(int argc, char const *argv[])
{while(scanf("%s%s",s+1,t+1)==2){memset(d,-1,sizeof(d));printf("%d\n", DP(1,strlen(s+1),30));  //一开始设一个不可能的值30}return 0;
}

LA 4394 String painter 区间DP -相关推荐

  1. uva live 4394 String painter 间隔dp

    // uva live 4394 String painter // // 问题是,在培训指导dp运动主题,乍一看,我以为只是一点点复杂 // A A磕磕磕,两个半小时后,.发现超过例子.然而,鉴于他 ...

  2. HDU-2476 String painter 区间DP

    题意:给你一个长度相等的A串和B串,每次可以把一个连续的区间刷成一个字母,问从A串到B串的最少操作数. 解法:虽然这类题一看到就知道是区间DP,但是之前只做过类似从空串变成某个串的题目,所以没想到怎么 ...

  3. UVALive 4394 String painter——dp

    设ans[i]为区间[1,i]已经染好的最小花费 若s[i]=t[i],ans[i]=ans[i-1] 否则ans[i]=min{ans[j-1]+cost(j,i)},cost(j,i)为区间[j, ...

  4. UVALive 4394 String painter

    题目大意:有两个字符串A,B,一次刷可以把A串一段刷成同一个字母,问至少要刷几次才能把A串变成B串.串长≤100. 本来以为是个很简单的区间DP,后来发现直接区间DP是不行的,这玩意有后效性:刷完一整 ...

  5. NYOJ 1067 Compress String(区间dp)

    Compress String 时间限制:2000 ms  |  内存限制:65535 KB 难度:3 描述 One day,a beautiful girl ask LYH to help her ...

  6. [CF1107E]Vasya and Binary String【区间DP】

    题目描述 Vasya has a string s of length n consisting only of digits 0 and 1. Also he has an array a of l ...

  7. hdu_2476_String painter(区间DP)

    题目链接:hdu_2476_String painter 题意: 有a,b两字符串,现在你有一个刷子,每次可以任选一个区间,使这个区间变成你想要的字符,现在让你将a变成b,问最少刷多少次 题解: 考虑 ...

  8. HDU2476:String painter(区间dp)

    原文地址:http://blog.csdn.net/a601025382s/article/details/12379565 原文作者:knownothing String painter Time ...

  9. HDU 2476 String painter (区间DP)

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

最新文章

  1. docker 连接容器
  2. 人脸识别的十大过程介绍
  3. 独家 | 送你12个关于数据科学学习的关键提示(附链接)
  4. 图像传感器与信号处理——详解图像传感器噪声
  5. 半导体二极管和晶体三极管
  6. pmp每日三题(2022年2月22日)
  7. daterangepicker 日期范围插件自定义 可选 年份
  8. AT4513-[AGC030D]InversionSum【dp】
  9. 2021未来职业规划以及对过去的总结
  10. flowable实战(三)flowable流程实例管理接口
  11. python基于值的内存管理模式_为什么说python采用的是基于值的内存管理模式
  12. Cisco交换机设置管理IP
  13. datagridview 排序后 选择不变_排序算法之插入排序
  14. display:none和visiblity:hidden区别
  15. Python 读取数据
  16. 浅谈JS各种宽高(clientHeight、scrollHeight、offsetHeight等)
  17. 电视android降低版本,电视猫旧版本下载-电视猫视频去升级版3.1.3 安卓版下载_飞翔下载...
  18. SWOT模板与方法论
  19. Molecule在GitHub与Gitee正式开源
  20. Feb14 小白《Linux就该这么学》学习笔记1

热门文章

  1. 【面试记录】基恩士2023招聘
  2. MATLAB模糊数据工具箱的使用
  3. EXCEL 2010添加趋势线
  4. Java面试常考的 BIO,NIO,AIO 总结
  5. 学习USART自闭实录(stm32F411RE)Stm32cubemx
  6. argc与argv参数的含义
  7. linux 下的 包过滤器 BPF
  8. oracle与u8比较,看网友的用友U8、金蝶K3、SAP、Oracle几大模块比较
  9. hive之生成唯一id
  10. c语言16进制怎么计算器,问各位大侠一个16进制计算器的问题(Charles Petzold著《windows程序设计》第11章)...