容易猜测到包含s1、s2序列的串的最短长度是LCS(s1,s2) + ( len(s1) - LCS(s1,s2) ) + ( len(s2) - LCS(s1,s2) ) ,即:

len(s1)+len(s2)-LCS(s1,s2)

接下来求方案数,可以想到:

dp[k][i][j]表示由s1前i位和s2前j位的序列构成的长度为k的串的方案数

dp[k][i][j]是由dp[k-1][i-1][j]、dp[k-1][i][j-1]和dp[k-1][i-1][j-1]转移的,而从dp[k-1][i-1][j-1]转移则要满足s1[i]==s2[j]的条件。

转移方程我纠结了好久,才“试”出来:

dp[k][i][j] = (s1[i]==s2[j]) ? dp[k-1][i-1][j-1] : dp[k-1][i-1][j]+dp[k-1][i][j-1]

然后因为自己想的一个数据s1="aa",s2="ab"又纠结了好久,才“试”出初始状态是:

d[1][1][0]=d[1][0][1]=1

(s1[1]==s2[1]) ? d[1][1][1]=1 : d[1][1][1]=0

最后提交就AC了,有点不明觉厉。。

 #include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int LCS[][];
long long d[][][];
int main(){
int t;
char s1[],s2[];
scanf("%d",&t);
for(int cse=; cse<=t; ++cse){
scanf("%s%s",s1+,s2+); int l1=strlen(s1+),l2=strlen(s2+);
memset(LCS,,sizeof(LCS));
for(int i=; i<=l1; ++i){
for(int j=; j<=l2; ++j){
if(s1[i]==s2[j]) LCS[i][j]=LCS[i-][j-]+;
else LCS[i][j]=max(LCS[i-][j],LCS[i][j-]);
}
}
int len=l1+l2-LCS[l1][l2]; memset(d,,sizeof(d));
d[][][]=d[][][]=;
if(s1[]==s2[]) d[][][]=;
for(int k=; k<=len; ++k){
for(int i=; i<=l1; ++i){
for(int j=; j<=l2; ++j){
if(i== && j==) continue;
if(i==) d[k][i][j]=d[k-][i][j-];
else if(j==) d[k][i][j]=d[k-][i-][j];
else if(s1[i]==s2[j]) d[k][i][j]=d[k-][i-][j-];
else d[k][i][j]=d[k-][i-][j]+d[k-][i][j-];
}
}
} printf("Case %d: %d %lld\n",cse,len,d[len][l1][l2]);
}
return ;
}

LightOJ1013 Love Calculator(DP)的更多相关文章

  1. LightOJ 1033 Generating Palindromes(dp)

    LightOJ 1033  Generating Palindromes(dp) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid= ...

  2. lightOJ 1047 Neighbor House (DP)

    lightOJ 1047   Neighbor House (DP) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=87730# ...

  3. UVA11125 - Arrange Some Marbles(dp)

    UVA11125 - Arrange Some Marbles(dp) option=com_onlinejudge&Itemid=8&category=24&page=sho ...

  4. 【POJ 3071】 Football(DP)

    [POJ 3071] Football(DP) Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4350   Accepted ...

  5. 初探动态规划(DP)

    学习qzz的命名,来写一篇关于动态规划(dp)的入门博客. 动态规划应该算是一个入门oier的坑,动态规划的抽象即神奇之处,让很多萌新 萌比. 写这篇博客的目标,就是想要用一些容易理解的方式,讲解入门 ...

  6. Tour(dp)

    Tour(dp) 给定平面上n(n<=1000)个点的坐标(按照x递增的顺序),各点x坐标不同,且均为正整数.请设计一条路线,从最左边的点出发,走到最右边的点后再返回,要求除了最左点和最右点之外 ...

  7. 2017百度之星资格赛 1003:度度熊与邪恶大魔王(DP)

    .navbar-nav > li.active > a { background-image: none; background-color: #058; } .navbar-invers ...

  8. Leetcode之动态规划(DP)专题-详解983. 最低票价(Minimum Cost For Tickets)

    Leetcode之动态规划(DP)专题-983. 最低票价(Minimum Cost For Tickets) 在一个火车旅行很受欢迎的国度,你提前一年计划了一些火车旅行.在接下来的一年里,你要旅行的 ...

  9. 最长公共子序列长度(dp)

    /// 求两个字符串的最大公共子序列长度,最长公共子序列则并不要求连续,但要求前后顺序(dp) #include <bits/stdc++.h> using namespace std; ...

随机推荐

  1. poj2965枚举

    The Pilots Brothers' refrigerator Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 20398 ...

  2. 一张图说明该选用神马程式来serve你的django应用

  3. calico for kubernetes

    (这一篇中很多错误,勿参考!) The reference urls: https://github.com/kubernetes/kubernetes/blob/master/docs/gettin ...

  4. com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: 3 字节的 UTF-8 序列的字节 3 无效。

    org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document fro ...

  5. ios学习总结(1) -- 创建第一个ios项目

    原文地址 下载并打开xcode. 接着新建一个工程,如下图所示: 点击Create a new Xcode project,之后选择ios下的Application,点击Single View App ...

  6. 记录远程桌面登录者的IP和MAC

    WINDOWS 2003 远程桌面不能记录登陆IP真是件头痛的事,本方法可以记录登陆者IP,具体的操作步骤如下: 1.建立一个存放日志的目录,如C盘下建立一个RDP的目录“C:/RDP”. 2.然后在 ...

  7. 传染病控制(codevs 1091)

    题目描述 Description [问题背景] 近来,一种新的传染病肆虐全球.蓬莱国也发现了零星感染者,为防止该病在蓬莱国 大范围流行,该国政府决定不惜一切代价控制传染病的蔓延.不幸的是,由于人们尚未 ...

  8. ASP.NET SignalR 与LayIM配合,轻松实现网站客服聊天室(二) 实现聊天室连接

    上一篇已经简单介绍了layim WebUI即时通讯组件和获取数据的后台方法.现在要讨论的是SingalR的内容,之前都是直接贴代码.那么在贴代码之前先分析一下业务模型,顺便简单讲一下SingalR里的 ...

  9. context switches per second 上下文切换

    上下文切换对系统来说意味着消耗大量的CPU时间.上下文切换只发生在内核态中.内核态是CPU的一种有特权的模式,在这种模式下只有内核运行并且可以访问所有内存和其它系统资源.

  10. asp.net获取客户端IP方法(转载)

    最近web获取客户端ip,看到下面这篇文章,转载过来,一起分享(转载地址:http://www.cnblogs.com/yejun/archive/2008/02/26/1082485.html) 通 ...