#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
using namespace std;
const long long moD = 100000000,maxN = 5010;
char a[maxN],b[maxN];
int la,lb,f[2][maxN],w[2][maxN];
int main(){
cin>>a>>b;
la = strlen(a)-1,lb = strlen(b)-1;
int x = 1,s = 0;
for(int i = 0;i <= la;i++)w[0][i] = 1;
for(int i = 0;i <= lb;i++){
w[x][0] = 1;
for(int j = 1;j <= la;j++){
f[x][j] = max(f[x][j-1],f[s][j]);
w[x][j] = 0;
if(b[i-1] == a[j-1])f[x][j] = max(f[x][j],f[s][j-1] + 1);
if(b[i-1] == a[j-1] && f[x][j] == f[s][j-1] + 1)w[x][j] += w[s][j-1];
if(f[x][j-1] == f[x][j])w[x][j] += w[x][j-1];
if(f[s][j] == f[x][j])w[x][j] += w[s][j];
if(b[i-1] != a[j-1] && f[s][j-1] == f[x][j])w[x][j] -= w[s][j-1];
w[x][j] = w[x][j] % moD;
}
x = 1 - x,s = 1 - s;
}
printf("%d\n%d\n",f[s][la],w[s][la]);
return 0;
}
为啥UKE了
求大佬解答