[UVa-437] Color Length
Description
给出两个字符串$a$,$b$,将他们穿插起来(相对位置不变),要求最小化$\sum L(c)$,其中$L(c)$的定义时在穿插完的字符串中字符$c$的最大位置与最小位置的差。
$n \leq 5000$。
Solution
问题的转化
这样的问题并不好用子问题来做,考虑最小化贡献。
贡献是可以$DP$的。令$dp_{i,j}$表示将$a$的前$i$个与$b$的前$j$个合并后对答案的最优贡献。维护每个字母第一次出现的状态和最后一次出现的状态转移即可。
/*By DennyQi 2019*/
#include <cstdio>
#include <queue>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
const int MAXN = ;
const int MAXM = ;
const int INF = 0x3f3f3f3f;
inline int Max(const int a, const int b){ return (a > b) ? a : b; }
inline int Min(const int a, const int b){ return (a < b) ? a : b; }
inline int read(){
int x = ; int w = ; register char c = getchar();
for(; c ^ '-' && (c < '' || c > ''); c = getchar());
if(c == '-') w = -, c = getchar();
for(; c >= '' && c <= ''; c = getchar()) x = (x<<) + (x<<) + c - ''; return x * w;
}
int T,dp[],cnt[],lsta[],lstb[],fsta[],fstb[],la,lb;
char a[],b[];
inline void Init_cnt(){
memset(lsta,,sizeof(lsta));
memset(lstb,,sizeof(lstb));
memset(fsta,0x3f,sizeof(fsta));
memset(fstb,0x3f,sizeof(fstb));
for(int i = ; i <= la; ++i){
lsta[a[i]-'A'] = max(lsta[a[i]-'A'],i);
fsta[a[i]-'A'] = min(fsta[a[i]-'A'],i);
}
for(int i = ; i <= lb; ++i){
lstb[b[i]-'A'] = max(lstb[b[i]-'A'],i);
fstb[b[i]-'A'] = min(fstb[b[i]-'A'],i);
}
}
inline void DP(){
memset(dp,INF,sizeof(dp));
memset(cnt,,sizeof(cnt));
char cur;
dp[] = ;
for(int i = ; i <= la; ++i){
for(int j = ; j <= lb; ++j){
if(i== && j==) continue;
if(i == ){
cnt[j] = cnt[j-];
cur = b[j]-'A';
if(j == fstb[cur]) ++cnt[j];
if(j == lstb[cur] && lsta[cur] == ) --cnt[j];
}
else{
cur = a[i]-'A';
if(j >= lstb[cur] && i >= lsta[cur]) --cnt[j];
if(j < fstb[cur] && i == fsta[cur]) ++cnt[j];
}
dp[j] = min((j==)?INF:dp[j-], (i==)?INF:dp[j])+cnt[j];
}
}
}
int main(){
scanf("%d",&T);
while(T--){
scanf("%s%s",a+,b+);
la = strlen(a+), lb = strlen(b+);
Init_cnt();
DP();
printf("%d\n",dp[lb]);
}
return ;
}
[UVa-437] Color Length的更多相关文章
- 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(线性DP + 滚动数组)
链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- UVa 1625 Color Length
思路还算明白,不过要落实到代码上还真敲不出来. 题意: 有两个由大写字母组成的颜色序列,将它们合并成一个序列:每次可以把其中一个序列开头的颜色放到新序列的尾部. 对于每种颜色,其跨度定义为合并后的序列 ...
- UVa 1625 Color Length (DP)
题意:给定两个序列,让你组成一个新的序列,让两个相同字符的位置最大差之和最小.组成方式只能从一个序列前部拿出一个字符放到新序列中. 析:这个题状态表示和转移很容易想到,主要是在处理上面,dp[i][j ...
- UVA 1625 Color Length 颜色的长度 (预处理+dp)
dp[i][j]表示前一个序列拿了i个颜色,后一个序列拿了j个颜色的最小花费. 转移的时候显然只能向dp[i+1][j],或dp[i][j+1]转移,每增加拿走一个颜色,之前已经出现但没结束的颜色个数 ...
- UVA 1625 "Color Length" (基础DP)
传送门 •参考资料 [1]:HopeForBetter •题意 •题解(by 紫书) •我的理解 用了一上午的时间,参考紫书+上述博文,终于解决了疑惑: 定义第一个颜色序列用串 s 表示,第二个用串 ...
- UVA 437 十九 The Tower of Babylon
The Tower of Babylon Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Subm ...
- Color Length UVA - 1625
题目大意: 给你两个字符串p,q,字符串中每个字符代表一个颜色,现在按顺序合并两个字符串,得到一个新字符串.新字符串的价值为,每个颜色价值的和,单个颜色价值的和等于该颜色在新字符中最后一次出现的位置减 ...
- Color Length UVA - 1625 DP
题目:题目链接 题意:输入两个长度分别为n和m的颜色序列,要求按顺序合并成同一个序列,即每次可以把一个序列开头的颜色放到新序列的尾部.对于每个颜色c来说,其跨度L(c)等于最大位置和最小位置之差,输出 ...
随机推荐
- .Net移动开发平台 ,基于VisualStudio的可视化开发——Smobiler平台入门教程
通过以下步骤,可以简单了解到如何下载Smobiler Designer(设计器).Client(客户端),以及如何通过设计器进行开发和调试移动应用,并在服务端部署.Cloud打包.访问您所开发的移动应 ...
- 并发concurrent---2
背景:并发知识是一个程序员段位升级的体现,同样也是进入BAT的必经之路,有必要把并发知识重新梳理一遍. 并发concurrent: 使用ThreadLocal可以实现线程范围内共享变量,线程A写入的值 ...
- 基于Springboot集成security、oauth2实现认证鉴权、资源管理
1.Oauth2简介 OAuth(开放授权)是一个开放标准,允许用户授权第三方移动应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方移动应用或分享他们数据的所有内容,OAu ...
- vue 数据改变但是视图没更新
在使用过程中会出现数据改变但是视图没有更新的情况(类型数组或者对象),这里我们就需要用到 $set 如果是对象类型: this.$set(this.userInfo, 'name', 'gionlee ...
- Dynamics 365-OnPremise V9 安装系统要求
Dynamics 365 V9 OnPremise发布之后,博主率真地直接下载安装,首先就遇到了操作系统不支持的问题,但是通过CRM安装报错提示,发现给的链接参考信息也不对. document的链接调 ...
- android---EventBus的简单使用(一)
是什么: 就是用来发消息通信的 怎么用: 定义事件:(消息体) public class MessageEvent { /* Additional fields if needed */ } 准备订阅 ...
- What is “Neural Network”
Modern neuroscientists often discuss the brain as a type of computer. Neural networks aim to do the ...
- ubuntu18.04 ssh 远程系统拒绝连接 解决方法
错误提示是这个: The remote system refused the connection. 原因是 Ubuntu 没安装 一个软件, 废话不多说 ,上解决方法: 执行该条命令,安装 ,安装 ...
- sprintboot 中占位符及多环境配置
(原) 关于springboot中多环境配置问题 1.在application.properties文件中通过 spring.profiles.active=... 选择系统所要加载的配置文件,这里的 ...
- html5 vedio 播放器,禁掉进度条快进快退事件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...