Color Length UVALive - 5841
题文:见网页:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=3852,(紫书p276)
题解:
这个题目统计答案,或者说状态的转移十分巧妙,我们想如果设dp[i][j]表示一号串到了第i位,二号串到了第j位的最小话费,显然还要记一下最开始放入这个字母的位置,十分不好写对不对,并且也状压不下。
那么我们可以考虑,对于一个状态dp[i][j],我们不最后来算他是多少,我们可以一边加,一边判断,看前面有那些字母已经出现了,并且后面还有这个字母,那么显然对于每个这种字母,都要有1的花费,所以,这个题目就变成了如何维护当前满足上述定义的字母的个数,这个我们主要分类讨论一下就可以了,具体实现看代码吧。
代码:(其实可以不用滚动数组)
#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<cstring>
#include<stdlib.h>
#define ll long long
const int MAXN=;
const int inf=<<;
using namespace std;
int dp[][MAXN],c[][MAXN];
int op1[],ed1[],op2[],ed2[];
int n,m;
char x[MAXN],y[MAXN];
int main(){
int t;scanf("%d",&t);
while(t--){
memset(dp,,sizeof(dp));
memset(c,,sizeof(c));
scanf("%s%s",x+,y+);
int n=strlen(x+),m=strlen(y+);
for(int i=;i<=n;i++) x[i]-='A';
for(int i=;i<=m;i++) y[i]-='A';
memset(op1,,sizeof(op1));
memset(op2,,sizeof(op2));
memset(ed1,,sizeof(ed1));
memset(ed2,,sizeof(ed2));
for(int i=;i<=n;i++){
op1[x[i]]=min(op1[x[i]],i);
ed1[x[i]]=i;
}
for(int i=;i<=m;i++){
op2[y[i]]=min(op2[y[i]],i);
ed2[y[i]]=i;
}
int now=,last=;dp[][]=;
for(int i=;i<=n;i++){
now^=,last^=;
memset(dp[now],,sizeof(now));
memset(c[now],,sizeof(now));
for(int j=;j<=m;j++){
if(!i&&!j) continue;
int v1=inf,v2=inf;
if(j) v1=dp[now][j-]+c[now][j-];
if(i) v2=dp[last][j]+c[last][j];
dp[now][j]=min(v1,v2);
if(i){
c[now][j]=c[last][j];
if(op1[x[i]]==i&&op2[x[i]]>j) c[now][j]++;
if(ed1[x[i]]==i&&ed2[x[i]]<=j) c[now][j]--;
}
else if(j){
c[now][j]=c[now][j-];
if(op2[y[j]]==j&&op1[y[j]]>i) c[now][j]++;
if(ed2[y[j]]==j&&ed1[y[j]]<=i) c[now][j]--;
}
}
}
printf("%d\n",dp[now][m]);
}
}
Color Length UVALive - 5841的更多相关文章
- UVA - 1625 Color Length[序列DP 代价计算技巧]
UVA - 1625 Color Length 白书 很明显f[i][j]表示第一个取到i第二个取到j的代价 问题在于代价的计算,并不知道每种颜色的开始和结束 和模拟赛那道环形DP很想,计算这 ...
- UVA - 1625 Color Length[序列DP 提前计算代价]
UVA - 1625 Color Length 白书 很明显f[i][j]表示第一个取到i第二个取到j的代价 问题在于代价的计算,并不知道每种颜色的开始和结束 和模拟赛那道环形DP很想,计算这 ...
- UVa 1625 Color Length
思路还算明白,不过要落实到代码上还真敲不出来. 题意: 有两个由大写字母组成的颜色序列,将它们合并成一个序列:每次可以把其中一个序列开头的颜色放到新序列的尾部. 对于每种颜色,其跨度定义为合并后的序列 ...
- Color Length
题意: 给出两个字符串,求把两字符串组成一个字符串使的字符串中的相同字母的最远距离的和最小. 分析: 本题关键在于怎么计算距离和的方法上.dp[i][j]表示处理到长度i的a串,长度j的b串还需要的计 ...
- 动态规划(模型转换):uvaoj 1625 Color Length
[PDF Link]题目点这里 这道题一眼就是动态规划,然而貌似并不好做. 如果不转换模型,状态是难以处理的. 巧妙地转化:不直接求一种字母头尾距离,而是拆开放到状态中. #include <i ...
- [UVa-437] Color Length
无法用复杂状态进行转移时改变计算方式:巧妙的整体考虑:压缩空间优化时间 传送门:$>here<$ 题意 给出两个字符串a,b,可以将他们穿插起来(相对位置不变).要求最小化ΣL(c),其中 ...
- UVa 1625 - Color Length(线性DP + 滚动数组)
链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- UVa 1625 Color Length (DP)
题意:给定两个序列,让你组成一个新的序列,让两个相同字符的位置最大差之和最小.组成方式只能从一个序列前部拿出一个字符放到新序列中. 析:这个题状态表示和转移很容易想到,主要是在处理上面,dp[i][j ...
- [UVA1625]Color Length
题面在这里 description 输入两个长度分别为\(n\)和\(m\)的颜色序列,要求按顺序合并成同一个序列,即每次可以把一个序列开头的颜色放到新序列的尾部. 对于每个颜色\(c\)来说,其跨度 ...
随机推荐
- c语言实现去除字符串首尾空格
字符串内存图如下: 引入头文件: 1 #include<stdlib.h> 2 #include<stdio.h> 3 #include<string.h> 函数原 ...
- git 中文乱码-一次被坑经历
git log和gitcommit中文出现乱码,花了大半天的时间试了网上的各种方法,还是搞不定. 只好放大招. 卸载软件后重装,还是不行.然后git config --list 发现一些奇怪的配置信息 ...
- HTML5有哪些新特性,移除了哪些元素?如何处理HTML5新标签的浏览器兼容性问题?如何区分HTML和HTML5?
HTML5现在已经不是SGML的子集,主要是关于图像,位置,存储,多任务等功能的增加. 绘画canvas: 用于媒介回放的video和audio元素: 本地离线存储localStorage长期存储数据 ...
- Linux常用命令 —— 进程类
service (CentOs6) 1.service 服务名 start -------------- 启动 2.service 服务名 stop ...
- MapReduce应用案例
1 环境说明 注意:本实验是对前述实验的延续,如果直接点开始实验进入则需要按先前学习的方法启动hadoop 部署节点操作系统为CentOS,防火墙和SElinux禁用,创建了一个shiyanlou用户 ...
- 13 (OC)* SDWebImage
IOS SDWebImage实现原理详解 在之前我写过SDWebImage的使用方法,主要是用与获取网络图片,没有看过的朋友可以看看. 这篇文章将主要介绍SDWebImage的实现原理,主要针对于 ...
- Java连载34-对象的内存分析、对象之间建立关系
一.内存分析 代码:引用可以是局部变量也可以是成员变量 public class Test1{ public static void main(String[] args){ User u = new ...
- Hadoop 之 Hadoop2.0
1.Hadoop2.0与1.0 答:Hadoop2.0之后的版本移除了原有的JobTracker和TaskTracker,改由Yarn平台的ResourceManager负责集群中所有资源的管理和分配 ...
- [Algorithm] Hashing for search
Hashing Process 关于hash本身,解决冲突是一个小重点,如下图. 代码实现分析 —— 定义HashTable类 一.数据结构 def __init__(self): self.size ...
- elasticsearch倒排索引与TF-IDF算法
elasticsearch专栏:https://www.cnblogs.com/hello-shf/category/1550315.html 一.倒排索引(Inverted Index)简介 在关系 ...