LightOJ 1013 - Love Calculator LCS
题意:找一个串使给出的两个串都是它的子串,要求最短,求出最短长度,以及种类数。
思路:可以想到,当两个子串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<bits/stdc++.h>
#define LL long long
#define PII pair<int ,int>
#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;
}
LightOJ 1013 - Love Calculator LCS的更多相关文章
- Light oj 1013 - Love Calculator (LCS变形)
		题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1013 题意: 给你两个字符串,让你构造出一个长度最小的字符串,且它的子序列包含 ... 
- [light oj 1013] Love Calculator
		1013 - Love Calculator Yes, you are developing a 'Love calculator'. The software would be quite comp ... 
- (最长公共子序列+推导)Love Calculator (lightOJ  1013)
		http://www.lightoj.com/volume_showproblem.php?problem=1013 Yes, you are developing a 'Love calcula ... 
- lightoj 1013 dp
		题目链接:http://lightoj.com/volume_showproblem.php?problem=1013 #include <cstdio> #include <cst ... 
- lightoj 1013
		思路:动态规划.设dp[i][j][k]表示用第一个串的前i隔字符和第二个串的前k隔字符组成长度为i的串的个数,那么:若s1[j+1] == s2[k+1] dp[i+1][j+1][k+1] += ... 
- Light OJ  1013	Love Calculator(DP)
		题目大意: 给你两个字符串A,B 要求一个最短的字符串C,使得A,B同时为C的子串. 问C最短长度是多少? C有多少种? 题目分析: 做这道题目的时候自己并没有推出来,看了网上的题解. 1.dp[C串 ... 
- Light OJ Dynamic Programming
		免费做一样新 1004 - Monkey Banana Problem 号码塔 1005 - Rooks 排列 1013 - Love Calculator LCS变形 dp[i][j][k]对于第一 ... 
- lightoj刷题日记
		提高自己的实力, 也为了证明, 开始板刷lightoj,每天题量>=1: 题目的类型会在这边说明,具体见分页博客: SUM=54; 1000 Greetings from LightOJ [简单 ... 
- loj 1013(LCS+记忆化搜索)
		题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=25839 思路:第一小问可以很快求出了,两个字符串的长度-LCS,然 ... 
随机推荐
- C Program进阶-数组
			(一)数组的内存布局 对于语句int a[5]; 我们明白这里定义了一个数组,数组里有5个元素,每一个元素都是int类型,我们可以用a[0],a[1]等访问数组里的元素,但是这些元素的名字就是a[0] ... 
- POJ 1679 The Unique MST(最小生成树)
			Description Given a connected undirected graph, tell if its minimum spanning tree is unique. Definit ... 
- FZU 1844 Earthquake Damage(最大流最小割)
			Problem Description Open Source Tools help earthquake researchers stay a step ahead. Many geological ... 
- 蓝牙ble数据转语音实现Android AudioRecord方法推荐
			蓝牙ble数据转语音实现Android AudioRecord方法推荐 教程 欢迎走进zozo的学习之旅. 概述 蓝牙BLE又称bluetooth smart,主打的是低功耗和快速链接,所以在支持的 ... 
- http://www.cnblogs.com/120626fj/p/7545958.html
			1.本周PSP 2.本周进度条: 代码行,博文字数,用到的知识点 3.累计进度图 3.1累计代码折线图 3.2累计博文字数折线图 4.本周PSP饼状图 
- PhotoShop基础工具 -- 移动工具
			还是学点美工的东西吧, 业余爱好 比学编程还难 PS版本 : PhotoShop CS6 1. 移动工具 (1) 工具栏和属性栏 工具栏 和 属性栏 : 左侧的是工具栏, 每选中一个工具, 在菜单 ... 
- Uva 1600 Patrol Robot (BFS 最短路)
			这道题运用的知识点是求最短路的算法.一种方法是利用BFS来求最短路. 需要注意的是,我们要用一个三维数组来表示此状态是否访问过,而不是三维数组.因为相同的坐标可以通过不同的穿墙方式到达. #inclu ... 
- unordered_map(hash_map)和map的比较
			测试代码: #include <iostream> using namespace std; #include <string> #include <windows.h& ... 
- DAY3敏捷冲刺
			站立式会议 工作安排 (1)服务器配置 (2)数据库配置 燃尽图 燃尽图有误,已重新修改,先贴卡片的界面,后面补修改后燃尽图 代码提交记录 
- Java中的 toString 方法
			1. Object 类中定义有 public String toString() 方法,其返回值是 String 类型,描述当前对象的有关信息: 2. 在进行 String 与其它类型数据的连接操作时 ... 
