考虑从左往右填数,维护当前数字权值与$A$权值的差值,如果差值大于9,那么以后无论怎么填,都不会改变大小关系。
所以设$f[i][j][k]$表示填了前$i$位,差值为$j$,是否卡住$B$上限为$k$的方案数,然后DP即可。
#include#include #include using namespace std;const int N=205,P=1000000007;int T,C,n,m,i,j,k,t,A[N],B[N],f[N][18][2],ans;char a[N],b[N];inline void up(int&a,int b){a+=b;if(a>=P)a-=P;}int main(){ scanf("%d",&T); for(C=1;C<=T;C++){ scanf("%s%s",a+1,b+1);n=strlen(a+1);m=strlen(b+1); for(i=1;i