dp[i][j]表示前一个序列拿了i个颜色,后一个序列拿了j个颜色的最小花费。

转移的时候显然只能向dp[i+1][j],或dp[i][j+1]转移,每增加拿走一个颜色,之前已经出现但没结束的颜色个数的跨度都增加1,为了在转移的时候快速算出这个值,先预处理出每个颜色在各个序列中的起始和终止位置。

memset (dp),然后就GG了

#include<bits/stdc++.h>
using namespace std; #define FOR(i,s,e) for(int i = s; i < e; i++)
#define RFOR(i,e,s) for(int i = e-1; i >= s; i--)
#define bug(x) cout<<#x<<'='<<endl #define MP make_pair
#define PB push_back
#define fi first
#define se second #define CLR(x) memset(x,0,sizeof(x));
#define CLRTo(x,v) memset(x,v,sizeof(x)); const int maxn = ; int dp[maxn][maxn]; const int N = ;
char s1[maxn];
char s2[maxn];
bool vis[N];
int ed2[N],ed1[N];
int st1[N],st2[N]; #define GetEd(x)\
CLR(vis);\
for(i = n##x-; i >= ; i--){\
int id = s##x[i] - 'A';\
if(!vis[id]){\
vis[id] = true;\
ed##x[id] = i;\
}\
} #define GetSt(x)\
CLR(vis);\
for(i = ; s##x[i]; i++){\
int id = s##x[i] - 'A';\
if(!vis[id]){\
vis[id] = true;\
st##x[id] = i;\
}\
}\
n##x = i; int cal(int i,int j)
{
int ret = ;
for(int k = ; k < N; k++){
bool f1 = j>=st2[k] || i>=st1[k];
bool f2 = j<ed2[k] || i < ed1[k];
ret += f1&&f2;
}
return ret;
} const int INF = 0x3fffffff; int main()
{
//freopen("in.txt","r",stdin);
int T; scanf("%d",&T);
while(T--){
scanf("%s%s",s1,s2);
int i;
int n1 ,n2 ;
fill(st1,st1+N,INF);
fill(st2,st2+N,INF);
fill(ed1,ed1+N,-INF);
fill(ed2,ed2+N,-INF);
GetSt() GetSt()
GetEd() GetEd()
for(i = ; i <= n1; i++){
for(int j = ; j <= n2; j++){
if(i&&j){
dp[i][j] = min(dp[i-][j],dp[i][j-])+cal(i-,j-);
}else {
if(i){
dp[i][j] = dp[i-][j]+cal(i-,j-);
}else if(j){
dp[i][j] = dp[i][j-]+cal(i-,j-);
}else {
dp[i][j] = ;
}
}
}
}
printf("%d\n",dp[n1][n2]);
}
return ;
}

UVA 1625 Color Length 颜色的长度 (预处理+dp)的更多相关文章

  1. UVA - 1625 Color Length[序列DP 代价计算技巧]

    UVA - 1625 Color Length   白书 很明显f[i][j]表示第一个取到i第二个取到j的代价 问题在于代价的计算,并不知道每种颜色的开始和结束   和模拟赛那道环形DP很想,计算这 ...

  2. UVA - 1625 Color Length[序列DP 提前计算代价]

    UVA - 1625 Color Length   白书 很明显f[i][j]表示第一个取到i第二个取到j的代价 问题在于代价的计算,并不知道每种颜色的开始和结束   和模拟赛那道环形DP很想,计算这 ...

  3. UVa 1625 - Color Length(线性DP + 滚动数组)

    链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  4. UVa 1625 Color Length

    思路还算明白,不过要落实到代码上还真敲不出来. 题意: 有两个由大写字母组成的颜色序列,将它们合并成一个序列:每次可以把其中一个序列开头的颜色放到新序列的尾部. 对于每种颜色,其跨度定义为合并后的序列 ...

  5. UVa 1625 Color Length (DP)

    题意:给定两个序列,让你组成一个新的序列,让两个相同字符的位置最大差之和最小.组成方式只能从一个序列前部拿出一个字符放到新序列中. 析:这个题状态表示和转移很容易想到,主要是在处理上面,dp[i][j ...

  6. UVA 1625 "Color Length" (基础DP)

    传送门 •参考资料 [1]:HopeForBetter •题意 •题解(by 紫书) •我的理解 用了一上午的时间,参考紫书+上述博文,终于解决了疑惑: 定义第一个颜色序列用串 s 表示,第二个用串 ...

  7. 1625 - Color Length——[动态规划]

    题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...

  8. 动态规划(模型转换):uvaoj 1625 Color Length

    [PDF Link]题目点这里 这道题一眼就是动态规划,然而貌似并不好做. 如果不转换模型,状态是难以处理的. 巧妙地转化:不直接求一种字母头尾距离,而是拆开放到状态中. #include <i ...

  9. Android:认识R类、findViewById方法查找组件、@string查找字符、@color查找颜色、@drawable查找图片、@dimen某个组件尺寸定义、项目引入资源国际化

    导入 之前都是断断续续的看了一些于如何使用android开发的文章.资料等,到目前位置很多基础的东西都不清楚,于是去学习了别人的课程,才了认识了R类.findViewById方法查找组件.项目引入资源 ...

随机推荐

  1. Eigen::aligned_allocator

    http://blog.csdn.net/rs_huangzs/article/details/50574141

  2. 1、css选择器

    一.CSS rgb颜色对照表:https://www.114la.com/other/rgb.htm 1.在标签上设置style属性 <!DOCTYPE html> <html la ...

  3. 极客时间_Vue开发实战_07.Vue组件的核心概念(3):插槽

    07.Vue组件的核心概念(3):插槽 严格来的说在2.0之后已经不分区这两种插槽的概念了. 因为它底层的实现已经趋向于相同了. 2.6为了兼容2.5的版本,现在依然可以用这两种写法 作用域插槽就是多 ...

  4. vue的踩坑路

    ------>axios模拟get json一直拿不到文件,先把data放到根目录,再去dev-server.js(就是npm执行的那个文件)里面设置静态资源访问路径app.use('/data ...

  5. POJ3268【最短路】

    题意: n个点m条有向边,每个点有一头牛,每头牛会沿着各自的最短路先到x点,然后又从x点到各自的点,求这些牛中间最短路程最大的牛. 思路: 从x点到各点的最短路不用说了,裸的最短路: 但是从所有点到x ...

  6. lightoj1010【LCS】

    题意: 求最长公共子序列,并且这个子序列是字典序最小. 思路: LCS附一个值,dp[i][j].first代表以i,j的LCS的长度,dp[i][j].second代表LCS结尾元素,然后利用路径输 ...

  7. Forward Rendering 正向渲染

    Forward Rendering 正向渲染        正向渲染一个基于着色器的渲染路径.它支持逐像素计算光照(包括法线贴图和灯光Cookies)和来自一个平行光的实时阴影.在默认设置中,少数最亮 ...

  8. printf汇总

    Reference: http://www.cplusplus.com/reference/cstdio/printf/ printf("%02d:%02d:%02d.%03d", ...

  9. MarketServer 日志

    2014.04.29 1. 发现有时候会跳出 Exception Infomations:   用户异常信息:Socket未连接 跟踪后发现的一次情况是: 服务器根据客户端请求从后台读取数据后,写数据 ...

  10. 初次接触Service笔记

    Service是后台的运行的小程序,分两种一种是StarService()另外一种是bindService(),这种可调用Service中的方法和返回结果等操作而StarService不能 他的生命周 ...