显示代码纯文本
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int n,m,k,a[27][27],fw[100001],sum[27][100001],f[100001];
string s=" ",ss;
int query(int x,int l,int r){return sum[x][r]-sum[x][l-1];}
int main(){
freopen("cowmbat.in","r",stdin);
freopen("cowmbat.out","w",stdout);
cin>>n>>m>>k>>ss;
s+=ss;
for(int i=0;i<m;i++)
for(int j=0;j<m;j++) cin>>a[i][j];
for(int o=0;o<m;o++)
for(int i=0;i<m;i++)
for(int j=0;j<m;j++){
if(i!=j&&j!=o&&i!=o) a[i][j]=min(a[i][j],a[i][o]+a[o][j]);
}
for(int i=0;i<m;i++)
for(int j=1;j<=n;j++) sum[i][j]=a[s[j]-'a'][i]+sum[i][j-1];
memset(fw,0x3f,sizeof(fw));
memset(f,0x3f,sizeof(f));
f[0]=0;
for(int i=k;i<=n;i++)
for(int j=0;j<m;j++){
fw[j]=min(fw[j]+a[s[i]-'a'][j],f[i-k]+query(j,i-k+1,i));
f[i]=min(f[i],fw[j]);
}
cout<<f[n]<<endl;
return 0;
}