您的位置:首页 > 其它

【UVA10728】

2015-08-05 17:51 120 查看
#include <iostream>
#include <cstring>
#include <cmath>
#include <queue>
#include <stack>
#include <list>
#include <map>
#include <set>
#include <string>
#include <cstdlib>
#include <cstdio>
#include <algorithm>
using namespace std;
    
int T;
char a[35];
char b[35];
typedef long long ll;
int l[35][35];
ll c[35][35];
int main()
{
    scanf("%d",&T);
	getchar();
	memset(l,0,sizeof(l));
	memset(c,0,sizeof(c));
	for(int i=0;i<35;i++)
	{
		c[i][0] = 1;
		c[0][i] = 1;
	}
	
	int C = 1;
	while(T --)
	{
		gets(a);
		gets(b);
		int l1 = strlen(a); 	
		int l2 = strlen(b); 
		for(int i=0;i<l1;i++)
		{
			for(int j=0;j<l2;j++)
			{
				if(a[i] == b[j])
				{
					l[i+1][j+1] = l[i][j] + 1;
					c[i+1][j+1] = c[i][j];
				}
				else 
				{
					if(l[i][j+1] == l[i+1][j])
					{
						c[i+1][j+1] = (c[i][j+1] + c[i+1][j]);
					}
					else if(l[i][j+1] > l[i+1][j])
					{
						c[i+1][j+1] = c[i][j+1];
					}
					else
					{
						c[i+1][j+1] = c[i+1][j];
					}
					l[i+1][j+1] = max(l[i][j+1],l[i+1][j]);
				}
			}
		}
		printf("Case #%d: %d %d\n",C++,l1+l2-l[l1][l2],c[l1][l2]);
	}
    return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: