#include<bits/stdc++.h>
using namespace std;
string t;
int dp[110][110];
int n;
// dp[i][j] 前i组前j个字符是否匹配的最小数量
int main()
{
memset(dp,0x3f,sizeof dp);
cin>>t>>n; dp[0][0]=0;
int len=t.size();
for(int i=1;i<=n;i++)
{
int x; cin>>x;
while(x--)
{
string ch; cin>>ch;
for(int j=0;j<=len;j++)
{
//ch匹配上 ch[j-le,j]
dp[i][j]=min(dp[i][j],dp[i-1][j]);
if(t.substr(j,ch.size())==ch)
{
dp[i][j+ch.size()]=min(dp[i][j+ch.size()],dp[i-1][j]+1);
}
}
}
}
if(dp[n][len]>1e9) cout<<-1;
else cout<<dp[n][len]; //返回答案
}
dp问题abc344 D
最新推荐文章于 2025-05-10 18:09:08 发布