博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LightOJ 1013 - Love Calculator LCS
阅读量:5059 次
发布时间:2019-06-12

本文共 2064 字,大约阅读时间需要 6 分钟。

题意:找一个串使给出的两个串都是它的子串,要求最短,求出最短长度,以及种类数。

思路:可以想到,当两个子串a,b拥有最长的公共子串为LCS时,那么可以求出的最短的串为lena+lenb-LCS。 那么接下来直接计算转移数就可以了,和平常求LCS的方法一样。DP[i][j][k]代表到选取了i个时已有j个a串的,k个b串的种类数。

 

 

 

/** @Date    : 2016-12-09-18.39  * @Author  : Lweleth (SoungEarlf@gmail.com)  * @Link    : https://github.com/  * @Version :  */#include
#define LL long long#define PII pair
#define MP(x, y) make_pair((x),(y))#define fi first#define se second#define PB(x) push_back((x))#define MMG(x) memset((x), -1,sizeof(x))#define MMF(x) memset((x),0,sizeof(x))#define MMI(x) memset((x), INF, sizeof(x))using namespace std;const int INF = 0x3f3f3f3f;const int N = 1e5+20;const double eps = 1e-8;char a[110],b[110];LL dp[110][50][50];int main(){ int T; int cnt = 0; cin >> T; while(T--) { scanf("%s%s", &a, &b); int x = strlen(a); int y = strlen(b); int ma = 0; MMF(dp); for(int i = 1; i <= x; i++ ) { for(int j = 1; j <= y; j++) { if(a[i-1] == b[j-1]) dp[0][i][j] = dp[0][i - 1][j - 1] + 1; else dp[0][i][j] = max(dp[0][i][j - 1], dp[0][i - 1][j]); } } int z = x + y - dp[0][x][y]; MMF(dp[0]); dp[0][0][0] = 1; for(int i = 1; i <= z; i++) { for(int j = 0; j <= x; j++) { for(int k = 0; k <= y; k++) { if(j > 0 && k > 0 && a[j-1] == b[k-1]) { dp[i][j][k] += dp[i - 1][j - 1][k - 1]; } else { if(j > 0) dp[i][j][k] += dp[i - 1][j - 1][k]; if(k > 0) dp[i][j][k] += dp[i - 1][j][k - 1]; } //cout << dp[i][j][k] << endl; } } } printf("Case %d: %d %lld\n", ++cnt, z, dp[z][x][y]); } return 0;}

转载于:https://www.cnblogs.com/Yumesenya/p/6151807.html

你可能感兴趣的文章
创业者要处理好的10大关系
查看>>
佛教和道教对“妖”的差异
查看>>
[TimLinux] Python IDE工具
查看>>
[TimLinux] Python Django与WSGI的简介
查看>>
从其它系统登录到SharePoint 2010系统的单点登录
查看>>
ElMAH(ASP.NET错误日志记录与通知)系列文章-基础应用篇
查看>>
pexpect学习阶段
查看>>
做最多的,展示最好的
查看>>
会员未登录显示ID=1的会员信息 解决方案
查看>>
Git与Repo入门(转载)
查看>>
夺命雷公狗---linux NO:10 linux的文件与目录的基本操作
查看>>
(shell)show all the folders and sub-folders
查看>>
linux配置ssh某用户只允许证书登陆
查看>>
Count the string
查看>>
黑马程序员---登录进阶练习
查看>>
微信公众号开发
查看>>
安装l Xposed Framework
查看>>
Nova 组件如何协同工作 - 每天5分钟玩转 OpenStack(24)
查看>>
如何在CentOS上使用高版本的GCC编译
查看>>
ScrollView 的使用(非原创)
查看>>