题目链接:11081 - Strings

题目大意:给出三个字符串,从分别从第一个字符串和第二个字符串中挑选子串a,b,用a和b组成第三个字符串,问可组成的子串有多少种。

解题思路:说起来惭愧啊,题目一点思路没有,题目老早就看了,今天查了题解,愣是想了一晚上,终于想清楚一点点了,dp[i][j][k]表是用s1中的前i个字符和s2中的前j个字符的子串组成s3前k个字符的情况。

仿照http://www.cnblogs.com/yuzhaoxin/archive/2012/05/04/2483259.html

#include <stdio.h>
#include <string.h>
const int N = 70;
const int tmp = 10007; int dp[N][N][N], dp1[N][N][N], dp2[N][N][N];
char s1[N], s2[N], s3[N]; int solve() {
int len1 = strlen(s1 + 1);
int len2 = strlen(s2 + 1);
int len3 = strlen(s3 + 1);
memset(dp, 0, sizeof(dp));
memset(dp1, 0, sizeof(dp1));
memset(dp2, 0, sizeof(dp2)); for (int i = 0; i <= len1; i++)
for (int j = 0; j <= len2; j++)
dp[i][j][0] = dp1[i][j][0] = dp2[i][j][0] = 1; for (int k = 1; k <= len3; k++) {
for (int i = 0; i <= len1; i++) {
for (int j = 0; j <= len2; j++) {
if (i) {
dp1[i][j][k] = dp1[i - 1][j][k];
if (s1[i] == s3[k])
dp1[i][j][k] += dp[i - 1][j][k - 1];
dp1[i][j][k] %= tmp;
}
if (j) {
dp2[i][j][k] = dp2[i][j - 1][k];
if (s2[j] == s3[k])
dp2[i][j][k] += dp[i][j - 1][k - 1];
dp2[i][j][k] %= tmp;
}
dp[i][j][k] = (dp1[i][j][k] + dp2[i][j][k]) % tmp;
}
}
}
return dp[len1][len2][len3];
} int main() {
int cas;
scanf("%d",&cas);
while (cas--) {
scanf("%s%s%s", s1 + 1, s2 + 1, s3 + 1);
printf("%d\n", solve());
}
return 0;
}

uva 11081 - Strings(LCS)的更多相关文章

  1. UVA 111(LCS问题)

     History Grading  Background Many problems in Computer Science involve maximizing some measure accor ...

  2. UVA - 10635 LIS LCS转换

    白书例题,元素互不相同通过哈希转换为LIS求LCS #include<iostream> #include<algorithm> #include<cstdio> ...

  3. uva 10453 dp/LCS变形

    https://vjudge.net/problem/UVA-10453 给出一个字符串,问最少添加几个字符使其变为回文串,并输出任意一种答案.就是一个类似于LCS的题目,而且简化了一下,只会出现三种 ...

  4. UVA 11404 简单LCS模型DP 字典序比较

    这个题目求某个字符串中含的最长的回文子串. 就是一个很简单的LCS模型吗,而且我不明白为什么网上这么多人都说仿照某写法把字符串先逆序一下,然后求LCS,我只想问一下,有必要吗? 直接按LCS的套路来就 ...

  5. UVA - 10723 类似LCS

    思路:dp(i, j)表示第一个串前i个字符和第二个串前j个字符需要的最短字符串长度,cnt(i, j)表示第一个串前i个字符和第二个串前j个字符需要的最短字符串的个数. 转移方程: if(s1[i] ...

  6. UVA题目分类

    题目 Volume 0. Getting Started 开始10055 - Hashmat the Brave Warrior 10071 - Back to High School Physics ...

  7. HZAU 17:LCS

    17: LCS Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 184  Solved: 43[Submit][Status][Web Board] De ...

  8. UVA 11404 Palindromic Subsequence[DP LCS 打印]

    UVA - 11404 Palindromic Subsequence 题意:一个字符串,删去0个或多个字符,输出字典序最小且最长的回文字符串 不要求路径区间DP都可以做 然而要字典序最小 倒过来求L ...

  9. Uva 10635 - Prince and Princess 问题转化,元素互不相同(在自身序列中独特)的两个数列的LCS,LIS 难度: 2

    题目 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&a ...

随机推荐

  1. UITextField点击return后注销第一响应者

    // 当点击了return按钮,就让text调用自己的endEditing方法 [textField addTarget:textField action:@selector(endEditing:) ...

  2. Json格式的http请求

    服务端PHP代码可以从这里下载:https://github.com/lornajane/PHP-Web-Services 1.使用volley实现: request要用JsonObjectReque ...

  3. MySQL的MyISAM和InnoDB对比及优化(转)

    MyISAM和InnoDB是在使用MySQL最常用的两个表类型,各有优缺点,视具体应用而定.基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持.MyISAM类型的表强调的是 ...

  4. 2.RxJava详解网址http

    RxJava 到底是什么 RxJava 好在哪 API 介绍和原理简析 1) Scheduler 的 API (二) 2) Scheduler 的原理(二) 3) 延伸:doOnSubscribe() ...

  5. Android-操作栏之副标题

    我们的目标是在操作栏右侧加上一个选项菜单,点击它就可显示或者隐藏操作栏的副标题. 由于操作栏是在API11级以后出现的,因此必须考虑兼容性问题.我们直接让低于API11的设备根本看不到选项菜单即可.建 ...

  6. SQL从入门到基础 - 07 抑制重复数据

    一.去掉数据重复 distinct 1. Select FDepartment from T_Employee →select distinct FDepartment from T_Employee ...

  7. 在OC中调用Swift类中定义delegate出现:Property 'delegate' not found on object of type ...

    找了许久没找到答案, 在下面的链接中, 我解决了这个问题: http://stackoverflow.com/questions/26366082/cannot-access-property-of- ...

  8. 浅谈JS中的闭包

    浅谈JS中的闭包 在介绍闭包之前,我先介绍点JS的基础知识,下面的基础知识会充分的帮助你理解闭包.那么接下来先看下变量的作用域. 变量的作用域 变量共有两种,一种为全局变量,一种为局部变量.那么全局变 ...

  9. 如何在Ubuntu 14.04中使用Samba共享文件

    Linux 下的文件共享利器 Samba 想必大家已经非常熟悉了,今天我们介绍下如何在Ubuntu 14.04中使用 Samba 共享网络文件.打印机和其它公共资源. 1.安装 Samba 和图形配置 ...

  10. Selenium2Library关键字

    对Selenium2Library关键字的整理和翻译.英文不好,仅供参考. 1.Add Cookie [ name | value | path=None | domain=None | secure ...