UVAlive 4394
题目大意:给定两个长度相等,只有小写字母组成的字符串s和t,每步可以把s的一个连续子串刷成同一个字母,问至少需要几步才能把s变成t?
大致方法:先用dp求出从空串刷到t的次数,然后在比较s和t求出最后的答案。
# include <iostream>
# include <cstdio>
# include <string>
# include <cstring>
# include <cstdio>
# include <cmath>
# include <algorithm>
# include <map>
# include <vector># define INF 0x3f3f3f3ftypedef long long ll;
using namespace std;char s1[105],s2[105];
int dp[105][105];int main()
{while(scanf("%s%s",s1,s2)!=EOF){int n=strlen(s1);memset(dp,0,sizeof(dp));for(int i=0;i<n;i++) dp[i][i]=1;for(int len=1;len<n;len++){for(int i=0;i+len<n;i++){int j=i+len;dp[i][j]=dp[i+1][j]+1;for(int k=i+1;k<=j;k++){if(s2[i]==s2[k]) dp[i][j]=min(dp[i][j],dp[i+1][k]+dp[k+1][j]);}}}int res[105];memset(res,INF,sizeof(res));if(s1[0]==s2[0]) res[0]=0;else res[0]=1;for(int i=1;i<n;i++){if(s1[i]==s2[i]){res[i]=res[i-1];continue;}res[i]=min(res[i],dp[0][i]);for(int j=0;j<i;j++){res[i]=min(res[j]+dp[j+1][i],res[i]);}}printf("%d\n",res[n-1]);}return 0;
}
UVAlive 4394相关推荐
- UVALive 4394 String painter
题目大意:有两个字符串A,B,一次刷可以把A串一段刷成同一个字母,问至少要刷几次才能把A串变成B串.串长≤100. 本来以为是个很简单的区间DP,后来发现直接区间DP是不行的,这玩意有后效性:刷完一整 ...
- 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, ...
- UVALive - 4394 (区间dp)
题意: 给出两个字符串:每次可以选择第一个字符串的一个区间,全部刷成某一个字母: 问最少刷几次可以刷成第二个串. 题解: 假设a是一个空串,设dp[i][j]为把空串a的[i,i+len-1]位置刷成 ...
- DP UVALive 6506 Padovan Sequence
题目传送门 /*题意:两行数字,相邻列一上一下,或者隔一列两行都可以,从左到右选择数字使和最大DP:状态转移方程:dp[i][j] = max (dp[i][j], dp[1-i][j-1] + a[ ...
- uva live 4394 String painter 间隔dp
// uva live 4394 String painter // // 问题是,在培训指导dp运动主题,乍一看,我以为只是一点点复杂 // A A磕磕磕,两个半小时后,.发现超过例子.然而,鉴于他 ...
- The UVALIVE 7716 二维区间第k小
The UVALIVE 7716 二维区间第k小 /** 题意:给一个n * n的矩阵,有q个查询每次查询r,c,s,k表示已(r,c)为右上角 大小为s的正方形中 第k小的元素n <= 250 ...
- UVALive 8513 lovers 2017 西安区域赛 B 贪心+multiset
UVALive 8513 有2种人,每个人有自己的权值$A_i$ $B_i$ 当$A_i + B_i >=K$时 两个人可以配对 问最多多少人可以配对 解法 : 把$/{ A_i /}$ 排序 ...
- 训练指南 UVALive - 3713 (2-SAT)
layout: post title: 训练指南 UVALive - 3713 (2-SAT) author: "luowentaoaa" catalog: true mathja ...
- 逆序数 UVALive 6508 Permutation Graphs
题目传送门 1 /* 2 题意:给了两行的数字,相同的数字连线,问中间交点的个数 3 逆序数:第一行保存每个数字的位置,第二行保存该数字在第一行的位置,接下来就是对它求逆序数 4 用归并排序或线段树求 ...
最新文章
- AE实现不同图层的合并C#代码
- Python程序设计题解【蓝桥杯官网题库】 DAY11-算法训练
- sphinx源码分析总结
- Tomcat服务器环境配置--查看bat文件(解决Neither the JAVA_HOME nor the JRE_HOME environment variable is defined问题)
- LIGHTOJ 1005(组合数学)
- hibernate底层dao
- .NET代码混淆学习和解决视频批量转换中.wmv转换出错问题
- Java:检查器框架
- 文治者必有武备不然长大了挨欺负_2017届高考语文全国卷文言文专题阅读15篇(附答案)...
- unix 获取程序占用内存_如何减少Docker和Kubernetes中的JVM应用程序内存占用
- 信号与系统考研复习例题详解_小语种日语日本文学复习考研资料加藤周一《日本文学史序说(上)》笔记和考研真题详解...
- dh算法c语言,openssl开源程序dh算法解析之dh_key.c
- linux系统中归档管理器,深度商店应用归档管理器、KShutdown、7-Zip、California
- 分享一款免费刷相关搜索、联想下拉推荐、网页快照排名的软件
- 【STM32基础】第四篇、控制PWM占空比
- 盛诺基和信达生物达成临床研究合作
- 马王堆汉墓帛书‧老子——甲本释文(德经)
- Win10计算机窗口空白,windows10语言栏丢失怎么办?win10语言栏显示空白的解决办法...
- 黑色温敏性PNIPAM-AuNPs/CHOL-AuNPs纳米金粒修饰聚合物的制备过程
- JavaScript实现EAN13条码校验