f(i, j) = f(i-1, j) + (S[i] == T[j]) * f(i-1, j-1).
class Solution {
public:
int numDistinct(string S, string T) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
int ls=S.size(),lt=T.size(),i,j;
int f[ls+1][lt+1];
for(i=0;i<=lt;++i)
f[0][i]=0;
for(i=0;i<=ls;++i)
f[i][0]=1;
f[0][0]=1;
for(i=1;i<=ls;++i){
for(j=1;j<=lt;++j){
f[i][j]=f[i-1][j]+f[i-1][j-1]*(S[i-1]==T[j-1]);
}
}
return f[ls][lt];
}
};