[PDF Link]题目点这里

  这道题一眼就是动态规划,然而貌似并不好做。

  如果不转换模型,状态是难以处理的。

  巧妙地转化:不直接求一种字母头尾距离,而是拆开放到状态中。

 #include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
const int maxn=;
char s1[maxn],s2[maxn];
int B1[],E1[],B2[],E2[];
int dp[maxn][maxn];
int add[maxn][maxn];
int main(){
int T,len1,len2;
scanf("%d",&T);
while(T--){
scanf("%s",s1+);
scanf("%s",s2+);
len1=strlen(s1+);
len2=strlen(s2+);
memset(B1,,sizeof(B1));
memset(E1,-,sizeof(E1));
memset(B2,,sizeof(B2));
memset(E2,-,sizeof(E2));
for(int i=;i<=len1;i++){
s1[i]-='A';
if(B1[s1[i]]>len1)B1[s1[i]]=i;
E1[s1[i]]=i;
} for(int i=;i<=len2;i++){
s2[i]-='A';
if(B2[s2[i]]>len2)B2[s2[i]]=i;
E2[s2[i]]=i;
} for(int i=;i<=len1;i++)
for(int j=;j<=len2;j++){
if(i==j&&i==)continue;
if(!i||j&&dp[i][j-]+add[i][j-]<=dp[i-][j]+add[i-][j]){
dp[i][j]=dp[i][j-]+add[i][j-];
add[i][j]=add[i][j-];
if(B2[s2[j]]==j&&B1[s2[j]]>i)
add[i][j]++;
if(E2[s2[j]]==j&&E1[s2[j]]<=i)
add[i][j]--;
}
if(!j||i&&dp[i][j-]+add[i][j-]>dp[i-][j]+add[i-][j]){
dp[i][j]=dp[i-][j]+add[i-][j];
add[i][j]=add[i-][j];
if(B1[s1[i]]==i&&B2[s1[i]]>j)
add[i][j]++;
if(E1[s1[i]]==i&&E2[s1[i]]<=j)
add[i][j]--;
}
}
printf("%d\n",dp[len1][len2]);
}
return ;
}

动态规划(模型转换):uvaoj 1625 Color Length的更多相关文章

  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. 1625 - Color Length——[动态规划]

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

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

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

  5. UVa 1625 Color Length

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

  6. UVa 1625 Color Length (DP)

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

  7. UVA 1625 Color Length 颜色的长度 (预处理+dp)

    dp[i][j]表示前一个序列拿了i个颜色,后一个序列拿了j个颜色的最小花费. 转移的时候显然只能向dp[i+1][j],或dp[i][j+1]转移,每增加拿走一个颜色,之前已经出现但没结束的颜色个数 ...

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

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

  9. 前端MVVM框架avalon - 模型转换1

    轻量级前端MVVM框架avalon - 模型转换(一) 接上一章 ViewModel modelFactory工厂是如何加工用户定义的VM? 附源码 洋洋洒洒100多行内部是魔幻般的实现 1: fun ...

随机推荐

  1. c#参数传递使用中的一个坑,值传递与引用传递

    c#参数传递使用中发现的一个问题 写了3个重载方法,把 对象.int .(int直接封入object) 传入SWAP方法进行数据操作结果对象内的数据发生了改变,其他2个没有:

  2. GridView中某一列值的总和(web)

    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)    {        if (e.Row.R ...

  3. ssh配置事务

    http://blog.csdn.net/jianxin1009/article/details/9202907(不错)

  4. UIView用户事件响应

    UIView除了负责展示内容给用户外还负责响应用户事件.本章主要介绍UIView用户交互相关的属性和方法. 1.交互相关的属性 userInteractionEnabled 默认是YES ,如果设置为 ...

  5. jstl--c:choose标签

    今天使用c:choose标签,一直报错: 严重: Servlet.service() for servlet CheckIncome threw exceptionorg.apache.jasper. ...

  6. 从XML文件中获取格式化的文本信息

    在FMW的运维过程中,时常需要将中间传输的XML信息转换为excel格式化的问题提交给关联系统人员,现总结三种格式化问题提供方式 一.使用Excel转换 因为从系统中取到的xml文档为中间信息文档,需 ...

  7. 编码问题导致样式显示在IE中不正常

    今天在做项目的时候,遇到样式显示不正常的问题,结果是因为用系统自带的notepad编辑器编辑文件时,编码格式被更改了.我们需要在Notepad++中,将编码格式改成Encode inUTF8 with ...

  8. mysql锁死的现象判断

    一般发生表锁死这种低级问题,就有两种情况:1.程序员水平太菜,2.程序逻辑错误. 一旦发生系统会出现超时,关键是有可能你看不到正在活动的php进程,而系统的慢查询日志也不会记录,只能通过show fu ...

  9. Asp.net GridView 72般绝技

    快速预览:GridView无代码分页排序GridView选中,编辑,取消,删除GridView正反双向排序GridView和下拉菜单DropDownList结合GridView和CheckBox结合鼠 ...

  10. 设置session的生命周期(php)

    PHP中,Session变量保存在服务器端(默认以文件格式保存),而Session ID以cookie形式保存在客户端. 销毁session的方法有2种 第一种是通过程序 session_destor ...