LightOJ - 1013 Love Calculator(LCS + DP)
2015-10-27 22:41
447 查看
题目大意:给你2个字符串,要求你求出另外一个字符串,这个字符串的子串(可以不连续)包含这两个字符串,且这个字符串的长度要最短,并问,有多少种组成方式
解题思路:字符串的最短长度就是两个字符串的长度和-LCS(两个字符串)
接着是求这个字符串有多少种组成方式了
用ans[i][j][k]表示该字符串当前有i个字符,包含了第一个字符串的j个字符,第2个字符串的k个字符的种类数
如果s1[j] = s2[k]
ans[i + 1][j + 1][k + 1] += ans[i][j][k]
如果s1[j] != s2[k]
ans[i + 1][j][k + 1] += ans[i][j][k]
ans[i + 1][j + 1][k] += ans[i][j][k]
解题思路:字符串的最短长度就是两个字符串的长度和-LCS(两个字符串)
接着是求这个字符串有多少种组成方式了
用ans[i][j][k]表示该字符串当前有i个字符,包含了第一个字符串的j个字符,第2个字符串的k个字符的种类数
如果s1[j] = s2[k]
ans[i + 1][j + 1][k + 1] += ans[i][j][k]
如果s1[j] != s2[k]
ans[i + 1][j][k + 1] += ans[i][j][k]
ans[i + 1][j + 1][k] += ans[i][j][k]
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int N = 35; char s1 , s2 ; int len1, len2, cas = 1; int dp ; long long ans[N * 2] ; void init() { scanf("%s%s", s1 + 1, s2 + 1); len1 = strlen(s1 + 1); len2 = strlen(s2 + 1); } int LCS() { memset(dp, 0, sizeof(dp)); for (int i = 1; i <= len1; i++) for (int j = 1; j <= len2; j++) { if (s1[i] == s2[j]) dp[i][j] = dp[i - 1][j - 1] + 1; else dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]); } return dp[len1][len2]; } void solve() { int len = len1 + len2 - LCS(); memset(ans, 0, sizeof(ans)); ans[0][0][0] = 1; for (int i = 0; i <= len; i++) for (int j = 0; j <= len1; j++) for (int k = 0; k <= len2; k++) if (ans[i][j][k]) { if (s1[j + 1] == s2[k + 1]) ans[i + 1][j + 1][k + 1] += ans[i][j][k]; else { ans[i + 1][j][k + 1] += ans[i][j][k]; ans[i + 1][j + 1][k] += ans[i][j][k]; } } printf("Case %d: %d %lld\n", cas++, len, ans[len][len1][len2]); } int main() { int test; scanf("%d", &test); while (test--) { init(); solve(); } return 0; }
相关文章推荐
- AngularJs angular.uppercase、angular.lowercase、angular.fromJson、angular.toJson
- 英语语法 不定词与助动词的共同点
- EffectiveC#01--避免返回内部类对象的引用
- 高兴新面试题总结
- 在fragment里面创建一个popwindow对象无法弹出的问题
- UE4材质初探
- 十月英语
- linux下的文件缓冲IO
- Javascript设计模式理论与实战:单例模式
- 创建GitHub技术博客全攻略(renfufei的专栏)
- web前端之JavaScript的变量和数据类型
- Unexpected namespace prefix "xmlns
- DOS命令之你不知道的dir
- 天漏
- [笔记]架构探险-从零开始写JavaWeb框架-2.1. 之使框架具有aop特性-aop框架加载与切面运行流程分析
- android自定义圆形图像
- LeetCode 刷题:move 一个数组中的所有0 到数组最后
- Ubuntu Apache配置以及cgi配置方法
- ReverseFile
- opencv下调整图片大小并保存