Problem G: 沉迷字符的WJJ
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 3 Solved: 2
Submit Web Board
Description
WJJ最近迷恋上了字符串,每次大家一起吃饭时他都会在大家面前炫耀一番新学的知识,于是
KKK和FFF决定难为一下WJJ。KKK和FFF分别写一个字符串s1和s2,要求WJJ也写一个字符串s3。
要求WJJ回答两个问题:
1、s1和s2都为s3的子序列并且使s3的长度最短
2、s3的组成方案有多少种?
Input
第一行输入一个t,表示t组数据
然后每组数据输入两个字符串,分别为s1,s2, 0<|s1|<=30, 0<|s2|<=30
Output
输出两个数分别为满足条件的s3的长度len1和方案数sum(sum小于2^63),输出占一行
Sample Input
3
ALKJ
SADIU
AAA
BBB
ABABAB
BABABA
Sample Output
8 20
6 20
7 2
HINT
LCS的变形, dp[i][j]就是s1中前i个字符和s2中前j个字符可以得到的满足条件的长度
当s1[i] == s2[j]时 dp[i][j] = d[i-1][j-1] + 1
不相等时 dp[i][j] = min(dp[i-1][j], dp[i][j-1]) + 1
sum[i][j]表示方案数
当s1[i] == s2[j]时 sum[i][j] = sum[i-1][j-1]
不相等时 如果dp[i][j-1] == dp[i-1][j], 那么两个方向都可以选择, 所以 sum[i][j] = sum[i-1][j] + sum[i][j-1]
如果dp[i][j-1] < dp[i-1][j] sum[i][j] = sum[i][j-1]
如果dp[i][j-1] > dp[i-1][j] sum[i][j] = sum[i-1][j]