显示代码纯文本
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,k,a[101][101],dis[101][101],f[1000001],nwt,ss[1000001][31],q[1000001];
char s[1000001];
signed main(){
freopen("cowmbat.in","r",stdin);
freopen("cowmbat.out","w",stdout);
cin>>n>>m>>k;
scanf("%s",s+1);
for(int i=1;i<=n;i++){
f[i]=q[i]=2e9;
}
f[0]=0;
for(int i=1;i<=m;i++){
for(int j=1;j<=m;j++){
cin>>dis[i][j];
}
}
for(int kk=1;kk<=m;kk++){
for(int i=1;i<=m;i++){
for(int j=1;j<=m;j++){
if(i!=j&&j!=kk&&i!=kk){
dis[i][j]=min(dis[i][j],dis[i][kk]+dis[kk][j]);
}
}
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
ss[i][j]=ss[i-1][j]+dis[s[i]-'a'+1][j];
}
}
for(int i=k;i<=n;i++){
for(int j=1;j<=m;j++){
q[j]=min(q[j]+dis[s[i]-'a'+1][j],f[i-k]+ss[i][j]-ss[i-k][j]);
f[i]=min(f[i],q[j]);
}
}
cout<<f[n];
}