题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=25839

思路:第一小问可以很快求出了,两个字符串的长度-LCS,然后第二问就要记忆化搜索了,dp[i][j][l]表示A串的前i个和B串的前j个组合,长度为l的组合数。

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define MAXN 33
#define FILL(a,b) memset(a,b,sizeof(a))
typedef long long ll; int n,len,len1,len2,dp1[MAXN][MAXN];
ll dp2[MAXN][MAXN][MAXN*]; char str1[MAXN],str2[MAXN];
int LCS()
{
FILL(dp1,);
for(int i=;i<=len1;i++){
for(int j=;j<=len2;j++){
if(str1[i-]==str2[j-])dp1[i][j]=dp1[i-][j-]+;
else dp1[i][j]=max(dp1[i-][j],dp1[i][j-]);
}
}
return dp1[len1][len2];
} ll dfs(int l1,int l2,int l)
{
if(dp2[l1][l2][l]!=-)return dp2[l1][l2][l];
else if(l==len)return l1==len1&&l2==len2;
else if(l1==len1)return dp2[l1][l2][l]=dfs(l1,l2+,l+);
else if(l2==len2)return dp2[l1][l2][l]=dfs(l1+,l2,l+);
else if(str1[l1]==str2[l2])return dp2[l1][l2][l]=dfs(l1+,l2+,l+);
return dp2[l1][l2][l]=dfs(l1+,l2,l+)+dfs(l1,l2+,l+);
} int main()
{
int _case=;
scanf("%d",&n);
while(n--){
scanf("%s%s",str1,str2);
len1=strlen(str1),len2=strlen(str2);
len=len1+len2-LCS();
FILL(dp2,-);
printf("Case %d: %d %lld\n",_case++,len,dfs(,,));
}
return ;
}

loj 1013(LCS+记忆化搜索)的更多相关文章

  1. loj 1044(dp+记忆化搜索)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=26764 思路:dp[pos]表示0-pos这段字符串最少分割的回文 ...

  2. 10723 Cyborg Genes (LCS + 记忆化搜索)

    Problem F Cyborg Genes Time Limit 1 Second September 11, 2132. This is the day that marks the beginn ...

  3. HDU 1513 Palindrome:LCS(最长公共子序列)or 记忆化搜索

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1513 题意: 给你一个字符串s,你可以在s中的任意位置添加任意字符,问你将s变成一个回文串最少需要添加 ...

  4. loj 1021(状压dp+记忆化搜索)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=25887 题目大意:给定的一个某进制下的排列,问它的全排列有多少个能 ...

  5. loj 1018(状压dp+记忆化搜索)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=25844 思路:首先预处理出点在同一直线上的所有的点集状态(dp[i ...

  6. loj 1011(状态压缩+记忆化搜索)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=25837 思路:状态压缩+记忆化搜索. #include<io ...

  7. 再谈记忆化搜索 HDU-1078

    最近做DP题目,发现无论是LCS,还是有些题目涉及将动态规划的路径打印出来,而且有时候还要按格式输出,这个时候,记忆化搜索显得尤其重要,确实,记忆化搜索使用优化版本的动态规划,用起来思路清晰,非常方便 ...

  8. [ACM_动态规划] 数字三角形(数塔)_递推_记忆化搜索

    1.直接用递归函数计算状态转移方程,效率十分低下,可以考虑用递推方法,其实就是“正着推导,逆着计算” #include<iostream> #include<algorithm> ...

  9. 【BZOJ-3895】取石子 记忆化搜索 + 博弈

    3895: 取石子 Time Limit: 1 Sec  Memory Limit: 512 MBSubmit: 263  Solved: 127[Submit][Status][Discuss] D ...

随机推荐

  1. IOS开发/iphone开发多线程

    有时候可能有很多功能要同时实现,例如每隔多长时间就会检测程序网络连接,又或者有时候需要从服务器下载一个不小的文件,如果用单线程几乎是不可想的事情,程序将会卡的无法使用,用到多线程和不用多线程,给用户的 ...

  2. Pb (数据存储单位)

    PB (数据存储单位) 编辑 pb指petabyte,它是较高级的存储单位,其上还有EB,ZB,YB等单位. 它等于1,125,899,906,842,624(2的50次方)字节,“大约”是一千个te ...

  3. NBUT1541 Rainwater 题解

    http://cdn.ac.nbutoj.com/Problem/view.xhtml?id=1541 When rain, nocLyt discovered a magical phenomeno ...

  4. 第17章 使用iSCSI服务部署网络存储

    章节概述: 本章节将分析SCSI与iSCSI技术结构的不同,了解iSCSI技术的优势.SAN存储网络技术结构以及iSCSI HBA卡的作用. 完整演示部署iSCSI target服务程序的方法流程:创 ...

  5. RouterOS DNS劫持 -- A记录

    通常我们使用RouterOS的DNS主要是用于实现DNS缓存功能,即由RouterOS实现DNS服务器解析功能,除了这个功能,RouterOS可以实现对内网域名解析劫持,即实现路由网关的A记录查询. ...

  6. LNK2005 连接错误解决办法

    nafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@ ...

  7. 坚持不懈之linux haproxy的配置文件关键字查询手册

    1.关键词balance balance用于定义负载均衡的算法,可用于defaults.listen和backend中. balance使用方法如下: balance <algorithm> ...

  8. Firefox上Web开发工具库一览

    Firefox的目标之一就是尽可能地使web开发者的生活更简单高效,并通过提供工具和具有很强扩展性的浏览器使人们创造出神奇的东西.使web开发者使用Firefox的时候,浏览器可以提供大量开发工具和选 ...

  9. C++复数四则运算的实现

    程序主要实现复数的加减乘,数乘,取共轭功能. 将所有函数都定义为了成员函数. 使用库函数atof将字符串转换为浮点型数据. 函数主要难点在于处理输入.由于需要判断输入是选择退出还是继续,所以用字符串来 ...

  10. tcp ip detatils

    tcp ip detatils 8.关于TCP协议,下面哪种说法是错误的()A.TCP关闭连接过程中,两端的socket都会经过TIME_WAIT状态B.对一个Established状态的TCP连接, ...