LightOJ 1013 - Love Calculator

原创 2015年11月20日 21:32:45

题意:

题意就是给你两个字符串,求能同事包含这两个字符串的最短串的长度和种数。
一个结论:最长包含串的长度=len(s)+len(t)-len(lcs(s,t)).
另外统计的方法和求lcs的方程转移差不多。
//
//  Created by  CQU_CST_WuErli
//  Copyright (c) 2015 CQU_CST_WuErli. All rights reserved.
//
// #include<bits/stdc++.h>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <cctype>
#include <cmath>
#include <string>
#include <vector>
#include <list>
#include <map>
#include <queue>
#include <stack>
#include <set>
#include <algorithm>
#include <sstream>
#define CLR(x) memset(x,0,sizeof(x))
#define OFF(x) memset(x,-1,sizeof(x))
#define MEM(x,a) memset((x),(a),sizeof(x))
#define ALL(x) x.begin(),x.end()
#define AT(i,v) for (auto &i:v)
#define For_UVa if (kase!=1) cout << endl
#define BUG cout << "I am here" << endl
#define lookln(x) cout << #x << "=" << x << endl
#define look(x) cout << #x << "=" << x
#define SI(a) scanf("%d",&a)
#define SII(a,b) scanf("%d%d",&a,&b)
#define SIII(a,b,c) scanf("%d%d%d",&a,&b,&c)
#define Lson l,mid,rt<<1
#define Rson mid+1,r,rt<<1|1
#define Root 1,n,1
#define BigInteger bign
const int MAX_L=2005;// For BigInteger
const int INF_INT=0x3f3f3f3f;
const long long INF_LL=0x7fffffff;
const int MOD=1e9+7;
const double eps=1e-9;
const double pi=acos(-1);
typedef long long  ll;
using namespace std;

const int N=40;
int len[N][N];
ll dp[N][N];

int main(){
#ifdef LOCAL
    freopen("C:\\Users\\john\\Desktop\\in.txt","r",stdin);
//  freopen("C:\\Users\\john\\Desktop\\out.txt","w",stdout);
#endif
    int T_T;cin >> T_T;
    getchar();
    for (int kase=1;kase<=T_T;kase++) {
        char s[N],t[N];
        gets(s+1);gets(t+1);
//      puts(s+1);puts(t+1);
        CLR(len);CLR(dp);
        int ls=strlen(s+1),lt=strlen(t+1);
        for (int i=1;i<=ls;i++) {
            for (int j=1;j<=lt;j++) {
                if (s[i]==t[j]) len[i][j]=len[i-1][j-1]+1;
                else len[i][j]=max(len[i-1][j],len[i][j-1]);
            }
        }
        for (int i=0;i<=ls;i++) dp[i][0]=1;
        for (int i=0;i<=lt;i++) dp[0][i]=1;
        for (int i=1;i<=ls;i++) {
            for (int j=1;j<=lt;j++) {
                if (s[i]==t[j]) dp[i][j]+=dp[i-1][j-1];
                else {
                    if (len[i][j]==len[i-1][j]) dp[i][j]+=dp[i-1][j];
                    if (len[i][j]==len[i][j-1]) dp[i][j]+=dp[i][j-1];
                }
            }
        }
        printf("Case %d: %d %lld\n",kase,ls+lt-len[ls][lt],dp[ls][lt]);
    }
    return 0;
}
版权声明:欢迎转载,转载请注明出处http://blog.csdn.net/cquwel

相关文章推荐

LightOJ 1013 - Love Calculator(DP)

题意:给你两个字符串str1,str2,要求求以这两个字符串为不下降子序列的字符串det最小长度,并且求出该字符串det的组合方式有多少种。 这个算是一道简单的DP题。第一个问题的关键是求两个字符串s...

LightOJ1013---Love Calculator (dp)

Yes, you are developing a ‘Love calculator’. The software would be quite complex such that nobody co...

LightOJ 1013 Love Calculator 【DP(LCS变形)】

题目链接题意给两个字符串,求长度最短的字符串的长度以及个数,使得给出的两个串都是这个串的子串。分析LCS的变形,首先长度自然是len(s1)+len(s2)-len(LCS)。关键是有多少个这样的字符...

【LightOJ 1013】Love Calculator(LCS+DP)

Problem DescriptionYes, you are developing a ‘Love calculator’. The software would be quite complex ...

LightOJ 1013 - Love Calculator (LCS + dp)

题意: |L|<=30的两个字符串,求一个新的最短的字符串包含它俩作为子序列,输出长度和此长度下的方法数|L|<=30的两个字符串, 求一个新的最短的字符串包含它俩作为子序列, 输出长度和此长度下...
  • lwt36
  • lwt36
  • 2015-11-13 02:22
  • 167

LightOJ 1013 - Love Calculator(LCS)

题意:给两个字符串s1和s2,求一个最短的字符串使得s1和s2均为这个字符串的字串,问这个串多长,这样的串有多少个。 思路:显然,串长 = s1和s2的长度和 - LCS(s1,s2)。进行一次dp求...

Light OJ 1013 Love Calculator

题目大意: 给你两个字符串a, b,问存在多少个这样的字符串。这样的字符串是指字符串a和字符串b都是该字符串的子串, 且这样的字符串要求长度最小。 输出这样的字符串的长度和存在多少个

Foxit Reader Pro 3.1.2 Build 1013

  • 2012-10-20 12:49
  • 9.82MB
  • 下载

[Code] 《JS权威指南》示例程序 -- Loan Calculator

都说前端最重要的技能要看JS 开始看犀牛书 照着开头的示例程序编写了一下 工具: Editplus 浏览器: 百度浏览器 抄写完程序以后,运行提示有脚本错误,如下:   对抄写!!!...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)