/*
dp[i][j]表示s前i个字符串与t中前j个字符串出的个数
当s[i]==t[j]时:
我们考虑s[i]能不能能不能算进匹配的字符,
如果不包括s[i] dp[i][j]=dp[i-1][j]
如果包括 dp[i][j]=dp[i-1][j-1]
*/
class Solution {
public:
typedef long long ll;
int numDistinct(string s, string t) {
int n=s.size();
int m=t.size();
vector<vector<ll>> dp(n+10,vector<ll>(m+10));
for(int i=0;i<=n;i++) dp[i][0]=1;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(s[i-1]==t[j-1]) dp[i][j]=dp[i-1][j]+dp[i-1][j-1];
else dp[i][j]=dp[i-1][j];
}
}
return dp[n][m];
}
};