【算法】【字符串动态规划】

0 阅读1分钟

atcoder.jp/contests/ty…

图片.png

#include <bits/stdc++.h>
using namespace std;
const int M=1e9+7;
const string T="atcoder";
void add(int &a,int &b){
	a+=b;
	if(a>=M)a-=M;
}
int main(){
	int n;string s;cin>>n>>s;
	vector<vector<int>>dp(n+1,vector<int>(T.size()+1,0));
	dp[0][0]=1;
	for(int i=0;i<n;i++){
		for(int j=0;j<=T.size();j++){
			add(dp[i+1][j],dp[i][j]);
			if(j<T.size()&&s[i]==T[j]){
				add(dp[i+1][j+1],dp[i][j]);
			}
		}
	}cout<<dp[n][T.size()];
}