记录编号 603434 评测结果 AAAAAAAAAAAAAAAA
题目名称 3321.[USACO19 DEC Gold]Moortal Cowmbat 最终得分 100
用户昵称 GravatarRuyi 是否通过 通过
代码语言 C++ 运行时间 0.353 s
提交时间 2025-07-12 14:16:56 内存使用 10.32 MiB
显示代码纯文本
#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;
}