75分求条
查看原帖
75分求条
941575
Stars_visitor_tyw楼主2025/8/2 22:29
#include<bits/stdc++.h>
// #define int long long
using namespace std;
const int mod=1e9+7;
int n, k, tot=1, trie[20005][205], exist[20005], dp[20005][205], siz[20005];
vector<int> nbr[20005];
int get_num(char ch)
{
	if(ch=='l')return 1;
	if(ch=='q')return 2;
	if(ch=='b')return 3;
}
void insert(string s)
{
	int cur=0;
	for(int i=0;i<s.size();i++)
	{
		int ch=get_num(s[i]);
		if(trie[cur][ch]==-1)
		{
			trie[cur][ch]=++tot;
		}
		nbr[cur].push_back(trie[cur][ch]);
		cur=trie[cur][ch];
	}
}
void dfs(int cur)
{
	dp[cur][1]=1;
	siz[cur]=1;
	for(int nxt:nbr[cur])
	{
		dfs(nxt);
		siz[cur]+=siz[nxt];
		for(int j=min(siz[cur],k);j>=0;j--)
		{
//			dp[cur][j]=0;
			for(int p=0;p<=min(j,siz[nxt]);p++)
			{
				dp[cur][j]=(dp[cur][j]+dp[cur][j-p]*dp[nxt][p]%mod)%mod;
			}
		}
	}
}
signed main()
{
	ios::sync_with_stdio(0),cin.tie(0);
	memset(trie,-1,sizeof trie);
	cin>>n>>k;
	for(int i=1;i<=n;i++)
	{
		string s;
		cin>>s;
		insert(s);
	}
	dfs(1);
	cout<<dp[1][k]%mod;
}
2025/8/2 22:29
加载中...