比赛 |
2025暑期集训第6场 |
评测结果 |
AAAAAAAAAAAAAAAA |
题目名称 |
Moortal Cowmbat |
最终得分 |
100 |
用户昵称 |
左清源 |
运行时间 |
0.479 s |
代码语言 |
C++ |
内存使用 |
35.92 MiB |
提交时间 |
2025-07-12 09:24:06 |
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cstring>
#define int long long
using namespace std;
const int N=1e5+10;
int n,m,K,s[N][26],v[26][26];
int f[N],mn[N][26];
char str[N];
signed main(){
freopen("cowmbat.in","r",stdin);
freopen("cowmbat.out","w",stdout);
scanf("%lld %lld %lld",&n,&m,&K);
scanf("%s",str+1);
for(int i=0;i<m;i++){
for(int j=0;j<m;j++){
scanf("%lld",&v[i][j]);
}
}
for(int k=0;k<m;k++){
for(int i=0;i<m;i++){
for(int j=0;j<m;j++){
v[i][j]=min(v[i][j],v[i][k]+v[k][j]);
}
}
}
for(int i=1;i<=n;i++){
int ch=str[i]-'a';
for(int j=0;j<26;j++){
s[i][j]=s[i-1][j]+v[ch][j];
}
}
memset(f,0x3f,sizeof(f));
memset(mn,0x3f,sizeof(mn));
f[0]=0;for(int j=0;j<m;j++)mn[0][j]=0;
for(int i=1;i<=n;i++){
for(int j=0;j<m;j++)if(i>=K)f[i]=min(f[i],mn[i-K][j]+s[i][j]);
for(int j=0;j<m;j++)mn[i][j]=min(mn[i-1][j],f[i]-s[i][j]);
}
printf("%lld\n",f[n]);
return 0;
}