在[1,i-1] 区间里找一个公共子序列
在 i这个点A[i]<B[i]
i后面的可以任意取
#include <bits/stdc++.h>
#define mod 1000000007
using namespace std;
long long la,lb,adf[5010],adg[5010],f[5010],g[5010];
char a[5010],b[5010];
int main()
{
cin>>a+1>>b+1;
la=strlen(a+1);
lb=strlen(b+1);
for(int i=1;i<=la;i++)
{
for(int j=1;j<=lb;j++) adf[j]=adg[j]=0;
for(int j=1;j<=lb;j++)
{
if(a[i]==b[j]) adg[j]=g[j-1]+1;
adf[j]=f[j-1];
if(a[i]<b[j]) adf[j]+=g[j-1]+1;
}
for(int j=1;j<=lb;j++)
{
adg[j]+=adg[j-1];
adf[j]+=adf[j-1];
g[j]+=adg[j];
f[j]+=adf[j];
adg[j]%=mod; adf[j]%=mod;
g[j]%=mod; f[j]%=mod;
}
}
cout<<(f[lb]%mod+mod)%mod;
return 0;
}