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

思路:可以想到,当两个子串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;
}

最新文章

  1. 支持向量机(SVM)相关免费学习视频集锦
  2. 初学iPad开发入门
  3. python pandas.DataFrame选取、修改数据最好用.loc,.iloc,.ix
  4. N个数的排列算法
  5. Android网络编程系列 一 Socket抽象层
  6. spring websocket Converters must not be empty
  7. [Javascript] Create an Array concatAll method
  8. Apache Log4j使用实例
  9. 《Algorithms 4th Edition》读书笔记——2.4 优先队列(priority queue)-Ⅴ
  10. JavaScript忍者秘籍——函数(上)
  11. 201521123074 《Java程序设计》第6周学习总结
  12. PHP-学习之路1
  13. Linux下高效指令
  14. Beanstalkd 一个高性能分布式内存队列系统
  15. thinkphp微信浏览器内拉起微信支付
  16. 工作中 sql 整理(一)
  17. SkylineGlobe 如何实现绘制圆形Polygon和对图层的圆形范围选择查询
  18. package-lock.json的作用
  19. Python3多线程之间的执行顺序问题
  20. [UE4]UMG和关卡坐标变换、旋转小地图

热门文章

  1. 官方文档 恢复备份指南三 Recovery Manager Architecture
  2. str和repr
  3. Thunder团队——事后诸葛亮会议
  4. UVALive - 6869 Repeated Substrings 后缀数组
  5. 内部网关协议RIP 路由选择算法(距离向量)
  6. js 拼接字符串时,本来想要’#1′ ,返回的却是’#01′
  7. 在Centos中,大容量,且读写频繁的目录
  8. [剑指Offer] 66.机器人的运动范围
  9. RT-thread内核之事件
  10. filter过滤器 默认情况下只对客户端发来的请求有过滤作用 对服务端的跳转不起作用 需要显示的在xml定义过滤的方式才行