求助,谢谢
#include <bits/stdc++.h>
using namespace std;
const int N=2e3+5,VR=305;
int n,m,V,E;
int c[N],d[N],e[VR][VR];
double k[N],f[N][2][N];
int main(){freopen("P1850_25.in","r",stdin);
cin>>n>>m>>V>>E;
for(int i=1;i<=n;i++)
cin>>c[i];
for(int i=1;i<=n;i++)
cin>>d[i];
for(int i=1;i<=n;i++)
cin>>k[i];
memset(e,0x3f,sizeof(e));
for(int i=1;i<=n;i++)
e[i][i]=0;
for(int i=1,u,v,w;i<=E;i++){
cin>>u>>v>>w;
e[u][v]=e[v][u]=min(e[u][v],w);
}
for(int k=1;k<=V;k++)
for(int i=1;i<=V;i++)
for(int j=1;j<=V;j++)
e[i][j]=min(e[i][j],e[i][k]+e[k][j]);
/*for(int i=1;i<=n;i++,puts(""))
for(int j=1;j<=n;j++)
cout<<e[i][j]<<' ';*/
for(int i=1;i<=n;i++)for(int j=0;j<=m;j++)f[i][0][j]=f[i][1][j]=1e9;
f[1][0][0]=f[1][1][1]=0;
for(int i=2;i<=n;i++){
f[i][0][0]=f[i-1][0][0]+e[c[i-1]][c[i]];//printf("%f %f\n",f[i][0][0],f[i][1][0]);
for(int j=1;j<=min(m,i);j++){
f[i][0][j]=min(f[i-1][0][j]+e[c[i-1]][c[i]],f[i-1][1][j]+k[i-1]*e[d[i-1]][c[i]]+(1-k[i-1])*e[c[i-1]][c[i]]);//cout<<e[d[i-1]][c[i]] <<' ';
if(j)f[i][1][j]=min(f[i-1][0][j-1]+k[i]*e[c[i-1]][d[i]]+(1-k[i])*e[c[i-1]][c[i]],f[i-1][1][j-1]+k[i-1]*k[i]*e[d[i-1]][d[i]]+(1-k[i-1])*k[i]*e[c[i-1]][d[i]]+k[i-1]*(1-k[i])*e[d[i-1]][c[i]]+(1-k[i-1])*(1-k[i])*e[c[i-1]][c[i]]);
//printf("%f %f\n",f[i][0][j],f[i][1][j]);
}
}
double ans=1e9;
for(int i=0;i<=m;i++)
ans=fmin(ans,min(f[n][0][i],f[n][1][i]));
printf("%.2f",ans);
}