比赛 |
2025暑期集训第6场 |
评测结果 |
AAAAAAAAAAAAAAAA |
题目名称 |
Moortal Cowmbat |
最终得分 |
100 |
用户昵称 |
徐诗畅 |
运行时间 |
0.308 s |
代码语言 |
C++ |
内存使用 |
10.05 MiB |
提交时间 |
2025-07-12 10:17:03 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int n,m,k,a[35][35],f[N],b[35],sum[35][N];
char s[N];
int main(){
freopen("cowmbat.in","r",stdin);
freopen("cowmbat.out","w",stdout);
scanf("%d%d%d",&n,&m,&k);
for(int i = 1;i<=n;i++) cin>>s[i];
for(int i = 1;i<=m;i++)
for(int j = 1;j<=m;j++)
scanf("%d",&a[i][j]);
for(int l = 1;l<=m;l++)
for(int i = 1;i<=m;i++)
for(int j = 1;j<=m;j++)
a[i][j]=min(a[i][j],a[i][l]+a[l][j]);
for(int i = 1;i<=n;i++)
for(int j =1;j<=m;j++)
sum[j][i]=a[s[i]-'a'+1][j]+sum[j][i-1];
memset(f,0x3f3f3f3f,sizeof(f)); f[0]=0;
memset(b,0x3f3f3f3f,sizeof(b));
for(int i = k;i<=n;i++){
for(int j = 1;j<=m;j++){
int tmp=sum[j][i]-sum[j][i-k];
b[j]=min(f[i-k]+tmp,b[j]+a[s[i]-'a'+1][j]);
f[i]=min(f[i],b[j]);
}
}
printf("%d",f[n]);
return 0;
}