你有两个 CPU,n个程序(m个类型)要运行。
在不同条件下程序运行的时间不同,但连续运行的时间满足小于等于在不连续状态下运行的时间。
#include <iostream>
#include <cstring>
#include <queue>
using namespace std;
const int N =5002;
#define int long long
#define inf 1e17
int n,K,c[N],a[N],b[N];
int f[N][N] ;
void sov(){
int i,j;
cin>>n>>K;
for(i=1;i<=n;i++) cin>>c[i];
for(i=1;i<=K;i++) cin>>b[i];
for(i=1;i<=K;i++) cin>>a[i];
for(i=0;i<=n;i++)
for(j=0;j<=K;j++) f[i][j]=inf;
f[1][0]=b[c[1]];
for(i=2;i<=n;++i){
int t=c[i-1];
for(j=0;j<=K;j++){
f[i][j]=min(f[i][j],f[i-1][j]+
(c[i]==t?a[c[i]]:b[c[i]]));
f[i][t]=min(f[i][t],f[i-1][j]+
(c[i]==j?a[c[i]]:b[c[i]]));
}
}
int ans=inf;
for(j=0;j<=K;j++) ans=min(ans,f[n][j]);
cout<<ans<<endl;
}
signed main(){
int tes;
cin>>tes;
while(tes--) sov();
}
浙公网安备 33010602011771号