| 比赛 |
2026.1.3 |
评测结果 |
AAAAWAAAAAAWWAAAAAAA |
| 题目名称 |
字符串游戲 |
最终得分 |
85 |
| 用户昵称 |
djyqjy |
运行时间 |
3.878 s |
| 代码语言 |
C++ |
内存使用 |
206.38 MiB |
| 提交时间 |
2026-01-03 11:30:56 |
显示代码纯文本
#include<bits/stdc++.h>
#define int long long
#define ll long long
#define pir pair<int,int>
#define fi first
#define se second
#define pb push_back
#define mp make_pair
using namespace std;
inline int re()
{
int f=1,num=0;
char c=getchar();
while(c<'0'||c>'9'){if(c=='-') f=-1;c=getchar();}
while(c>='0'&&c<='9') num=num*10+c-'0',c=getchar();
return num*f;
}
int T;
void clear();
const int N=210,M=30,L=20;
int f[N][N],g[N][N][M][L];
int n,m,K;
char s[N],t[M][L];
int slen[M];
int res[N][N];
void work()
{
clear();
n=re();m=re();K=re();
scanf("%s",s+1);
for(int i=1;i<=m;i++) scanf("%s",t[i]+1),slen[i]=strlen(t[i]+1);
memset(f,0x3f,sizeof(f));
memset(g,0x3f,sizeof(g));
for(int i=1;i<=n;i++) for(int j=1;j<i;j++) f[i][j]=0;
for(int i=1;i<=n;i++) for(int j=1;j<i;j++) for(int k=1;k<=m;k++) g[i][j][k][0]=0;
// for(int i=1;i<=n;i++)
// {
// for(int j=1;j<=m;j++) if(t[j][1]==s[i]) g[i][i][j][1]=0;
// }
for(int len=1;len<=n;len++)
{
for(int l=1;l+len-1<=n;l++)
{
int r=l+len-1;
for(int i=1;i<=m;i++)
{
for(int j=1;j<=slen[i];j++)
{
if(s[r]!=t[i][j]) continue;
for(int k=l-1;k<r;k++)
{
g[l][r][i][j]=min(g[l][r][i][j],g[l][k][i][j-1]+f[k+1][r-1]);
}
}
}
for(int i=1;i<=m;i++) f[l][r]=min(f[l][r],g[l][r][i][slen[i]]+1);
}
}
// for(int i=1;i<=n;i++) {for(int j=1;j<=n;j++) cout<<f[i][j]<<' ';cout<<endl;}
memset(res,0x3f,sizeof(res));
res[0][0]=0;
for(int i=1;i<=n;i++)
{
for(int j=0;j<=K;j++) res[i][j]=res[i-1][j]+1;
for(int j=0;j<=K;j++)
{
for(int k=1;k<=i;k++) if(j>=f[k][i]) res[i][j]=min(res[i][j],res[k-1][j-f[k][i]]);
}
}
int ans=0x3f3f3f3f3f3f3f3f;
for(int i=0;i<=K;i++) ans=min(ans,res[n][i]);
printf("%d\n",ans);
return;
}
signed main()
{
freopen("string.in","r",stdin);
freopen("string.out","w",stdout);
T=1;
while(T--) work();
return 0;
}
void clear()
{
return;
}