博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
uva 10069 - Distinct Subsequences(大数相加+DP)
阅读量:4035 次
发布时间:2019-05-24

本文共 2943 字,大约阅读时间需要 9 分钟。

1、

2、数据好大,longlong也不对,用大数相加

dp[i][j]表示b的前i个字符在a的前j个字符中出现的次数

状态转移方程;

if(b[i-1]==a[j-1])//如果b的第i个字符和a的第j个字符相同,那么dp[i][j]=dp[i][j-1]+dp[i-1][j-1]

else

dp[i][j]=dp[i][j-1];

题目大意;

给定两个序列a,b,求出a中有多少个b序列,只要顺序相同即可, 不必要连续

题目;

Problem E

Distinct Subsequences

Input: standard input

Output: standard output

 

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 <i1i2, …, ik> of indices of Xsuch 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
____________________________________________________________________________________
Rezaul Alam Chowdhury

4、AC代码:

#include
#include
#include
using namespace std;char a[10005];char b[105];char dp[105][10005][105];void add(char *c,char *a,char *b){ int la=strlen(a); int lb=strlen(b); int lc=max(la,lb); memset(c,0,(lc+2)*sizeof(c[0])); for(int i=la-1,j=lc;i>=0;i--,j--) c[j]+=a[i]-'0'; for(int i=lb-1,j=lc;i>=0;i--,j--) c[j]+=b[i]-'0'; for(int i=lc;i>0;c[i]+='0',i--) { if(c[i]>9) { c[i]-=10; c[i-1]++; } } if(!c[0]) { for(int i=0;i
超时代码:(思路对,加上大数相加即可)

#include
#include
#define N 10005char a[N];char b[105];int dp[105][N];//dp[i][j]表示子串的前i个字符在母串的前j个字符中出现的次数int main(){ int t; scanf("%d",&t); while(t--) { scanf("%s%s",a,b); int la=strlen(a); int lb=strlen(b); memset(dp,0,sizeof(dp)); for(int i=0;i<=la;i++) dp[0][i]=1; for(int i=1;i<=lb;i++) { for(int j=i;j<=la;j++) { if(a[j-1]==b[i-1]) dp[i][j]=dp[i-1][j-1]+dp[i][j-1]; else dp[i][j]=dp[i][j-1]; } } printf("%d\n",dp[lb][la]); } return 0;}

转载地址:http://khddi.baihongyu.com/

你可能感兴趣的文章
mysql:sql alter database修改数据库字符集
查看>>
mysql:sql drop table (删除表)
查看>>
mysql:sql truncate (清除表数据)
查看>>
scrapy:xpath string(.)非常注意问题
查看>>
yuv to rgb 转换失败呀。天呀。谁来帮帮我呀。
查看>>
yuv420 format
查看>>
YUV420只绘制Y通道
查看>>
yuv420 还原为RGB图像
查看>>
LED恒流驱动芯片
查看>>
驱动TFT要SDRAM做为显示缓存
查看>>
使用file查看可执行文件的平台性,x86 or arm ?
查看>>
qt5 everywhere 编译summary
查看>>
qt5 everywhere编译完成后,找不到qmake
查看>>
arm-linux开机读取硬件时钟,设置系统时钟。
查看>>
交叉编译在x86上调试好的qt程序
查看>>
/dev/input/event0 键盘输入
查看>>
qt 创建异形窗体
查看>>
可重入函数与不可重入函数
查看>>
简单Linux C线程池
查看>>
内存池
查看>>