题意 求母串中子串出现的次数(长度不超过1后面100个0  显然要用大数了)

令a为子串 b为母串 d[i][j]表示子串前i个字母在母串前j个字母中出现的次数   当a[i]==b[j]&&d[i-1][j-1]!=0时 d[i][j]=d[i-1][j-1]+d[i][j-1]

(a[i]==b[j]时 子串前i个字母在母串前j个字母中出现的次数 等于 子串前i-1个字母在母串前j-1个字母中出现的次数 加上 子串前i个字母在母串前j-1个字母中出现的次数

 a[i]!=b[j]时 子串前i个字母在母串前j个字母中出现的次数 等于 子串前i个字母在母串前j-1个字母中出现的次数)

懒得写大数模版就用java交的  ;

import java.util.*;
import java.math.*; public class Main {
public static void main(String args[]) {
BigInteger d[][] = new BigInteger[105][10005];
Scanner in = new Scanner(System.in);
int t = in.nextInt();
while ((t--) != 0) {
String b = in.next();
String a = in.next();
int la = a.length();
int lb = b.length(); for (int i = 0; i < la; ++i)
for (int j = 0; j < lb; ++j)
d[i][j] = BigInteger.ZERO; if (a.charAt(0) == b.charAt(0))
d[0][0] = BigInteger.ONE;
for (int j = 1; j < lb; ++j) {
if (a.charAt(0) == b.charAt(j))
d[0][j] = d[0][j - 1].add(BigInteger.ONE);
else
d[0][j] = d[0][j - 1];
} for (int i = 1; i < la; ++i)
for (int j = 1; j < lb; ++j) {
if (a.charAt(i) == b.charAt(j)
&& d[i - 1][j - 1] != BigInteger.ZERO) {
d[i][j] = d[i][j - 1].add(d[i - 1][j - 1]);
} else
d[i][j] = d[i][j - 1];
} System.out.println(d[la - 1][lb - 1]); }
in.close();
}
}

还有没加大数模版的C++代码

#include<cstdio>
#include<cstring>
using namespace std;
char b[10005], a[105];
int d[105][10005], la, lb, t;
void dp()
{
memset(d, 0, sizeof(d));
for(int j = 1; j <= lb; ++j)
{
if(a[1] == b[j]) d[1][j] = d[1][j - 1] + 1;
else d[1][j] = d[1][j - 1];
}
for(int i = 2; i <= la; ++i)
for(int j = 1; j <= lb; ++j)
{
if(a[i] == b[j] && d[i - 1][j - 1])
{
d[i][j] = d[i][j - 1] + d[i - 1][j - 1];
}
else d[i][j] = d[i][j - 1];
}
}
int main()
{
scanf("%s", &t);
while(t--)
{
scanf("%s%s", b + 1, a + 1);
la = strlen(a + 1);
lb = strlen(b + 1);
dp();
printf("%d\n", d[la][lb]); }
return 0;
}

Distinct Subsequences

A subsequence of a given sequence is just the given sequence with some elements (possibly none) left out. Formally, given a sequence X = x1x2xm,
another sequence Z = z1z2zk is a subsequence of X if there exists a strictly increasing sequence <i1,i2,
…, ik>
 of indices of X such that for all j = 1, 2, …, k, we have xij = zj. For example, Z = bcdb is
a subsequence of X =abcbdab with corresponding index sequence < 2, 3, 5, 7 >.

In this problem your job is to write a program that counts the number of occurrences of Z in X as a subsequence such that
each has a distinct index sequence.

 

Input

The first line of the input contains an integer N indicating the number of test cases to follow.

The first line of each test case contains a string X, composed entirely of lowercase alphabetic characters and having length no greater than 10,000.
The second line contains another string Z having length no greater than 100 and also composed of only lowercase alphabetic characters. Be assured that neither Z nor any prefix or suffix of Z will
have more than 10100 distinct occurrences in X as a subsequence.

 

Output

For each test case in the input output the number of distinct occurrences of Z in X as a subsequence. Output
for each input set must be on a separate line.

 

Sample Input

2

babgbag

bag

rabbbit

rabbit

 

Sample Output

5

3

UVa 10069 Distinct Subsequences(大数 DP)的更多相关文章

  1. uva 10069 Distinct Subsequences 【dp+大数】

    题目:uva 10069 Distinct Subsequences 题意:给出一个子串 x 和母串 s .求子串在母串中的不同序列的个数? 分析:定义dp[i][j]:x 的前 i 个字母在 s 的 ...

  2. uva 10069 Distinct Subsequences(高精度 + DP求解子串个数)

    题目连接:10069 - Distinct Subsequences 题目大意:给出两个字符串x (lenth < 10000), z (lenth < 100), 求在x中有多少个z. ...

  3. UVA 10069 Distinct Subsequences(DP)

    考虑两个字符串,我们用dp[i][j]表示字串第到i个和字符串到第j个的总数,由于字串必须连续 因此dp[i][j]能够有dp[i][j-1]和dp[i-1][j-1]递推而来,而不能由dp[i-1] ...

  4. 115. Distinct Subsequences (String; DP)

    Given a string S and a string T, count the number of distinct subsequences of T in S. A subsequence ...

  5. Distinct Subsequences (dp)

    Given a string S and a string T, count the number of distinct subsequences of T in S. A subsequence ...

  6. [LeetCode] Distinct Subsequences 不同的子序列

    Given a string S and a string T, count the number of distinct subsequences of T in S. A subsequence ...

  7. LeetCode(115) Distinct Subsequences

    题目 Given a string S and a string T, count the number of distinct subsequences of T in S. A subsequen ...

  8. [Leetcode][JAVA] Distinct Subsequences

    Given a string S and a string T, count the number of distinct subsequences of T in S. A subsequence ...

  9. Distinct Subsequences Leetcode

    Given a string S and a string T, count the number of distinct subsequences of T in S. A subsequence ...

随机推荐

  1. [luogu] P3210 [HNOI2010]取石头游戏(贪心)

    P3210 [HNOI2010]取石头游戏 题目描述 A 公司正在举办一个智力双人游戏比赛----取石子游戏,游戏的获胜者将会获得 A 公司提供的丰厚奖金,因此吸引了来自全国各地的许多聪明的选手前来参 ...

  2. 一种神奇的双向循环链表C语言实现

    最近在看ucore操作系统的实验指导.里面提要一个双向循环链表的数据结构,挺有意思的. 其实这个数据结构本身并不复杂.在普通链表的基础上加一个前向指针,我们就得到了双向链表,再把头尾节点连起来就是双向 ...

  3. thinkphp 同一字段不同查询条件实现

    搞定了 另外区间查询还可以支持更多的条件,只要是针对一个字段的条件都可以写到一起,例如:$map['name'] = array(array('like','%a%'), array('like',' ...

  4. HDU 1709

    MB,一开始就想到是不是只要加上一个不选择砝码的情况,但一直没动手做,因为看了看网上了,觉得总有点复杂,认为自己想错了.... 相信自己 #include <iostream> #incl ...

  5. Eureka Server添加用户认证

    Eureka Server添加用户认证 学习了:http://blog.csdn.net/liuchuanhong1/article/details/54729556 注意:1,需要使用 defaul ...

  6. 浅谈关于collection接口及相关容器类(一)

    Collection在英文单词的意思是:採集,收集. 而在JAVA API 文档中它是一个收集数据对象的容器. Collection作为容器类的根接口.例如以下图(部分子接口未写出): waterma ...

  7. silverlight wpf DataTemplate Command binding

    <Grid x:Name="LayoutRoot" Background="White"> <CommonControl:NoapDataGr ...

  8. JS 控制checkbox 获取 全选 全不选 一行不选择全选则不被选择 所有选择全选被选择

    //点击全选button的事件操作 function selectAll(){ var allcheckBoxs=document.getElementsByName("iTo") ...

  9. [poj3974] Palindrome 解题报告 (hash\manacher)

    题目链接:http://poj.org/problem?id=3974 题目: 多组询问,每组给出一个字符串,求该字符串最长回文串的长度 数据范围支持$O(nlog n)$ 解法一: 二分+hash ...

  10. BZOJ 4568 倍增维护线性基

    在树的路径上选取一些点 使得这些点权xor后的结果最大 思路: 时限60s 59696ms卡过去了哈哈哈 //By SiriusRen #include <cstdio> #include ...