求助
查看原帖
求助
867875
niveKmAI楼主2024/4/11 17:24
#include<bits/stdc++.h>
#define int long long
using namespace std;
vector<int>v[5005];
int dp[5005][5005];
int a[5005];
int c[5005];
int n,m,k,x;
int ans=0x3f3f3f3f;
signed main() {
	cin>>n>>m>>k>>x;
	for(int i=1; i<=n; i++) {
		cin>>a[i];
	}
	for(int i=1; i<=n; i++) {
		cin>>c[i];
		v[c[i]].push_back(i);
	}
	memset(dp,0x3f3f3f3f,sizeof(dp));
	for(int i=0; i<=n; i++) {
		dp[i][0]=0;
	}
	int cnt=0;
	for(int i=1; i<=k; i++) {
		for(int j=0; j<v[i].size(); j++) {
			int kk=cnt+j+1;
			if(kk>=n){
				kk=n;
			}
			for(int q=1; q<=kk; q++) {
				if(q%2==0) {
					dp[kk][q]=min(dp[kk-1][q],dp[kk-1][q-1]+a[v[i][j]]+v[i][j]*x);
				} else {
					dp[kk][q]=min(dp[kk-1][q],dp[kk-1][q-1]+a[v[i][j]]-v[i][j]*x);
				}
			}
		}
		cnt+=v[i].size();
	}
	for(int i=n-m; i<=n; i++){
		for(int j=(n-m)%2+(n-m); j<=i; j+=2){
			ans=min(ans,dp[i][j]);
		}
	}
	if(ans==0x3f3f3f3f){
		cout<<"Impossible"<<endl;
		return 0;
	}
	cout<<ans;
	return 0;
}
2024/4/11 17:24
加载中...