大佬求助
查看原帖
大佬求助
1020566
prg_equal_depressed楼主2024/7/1 15:37
#include <iostream>
#include <cmath>
#include <cstring>
using namespace std;
int n,x,y,z,q1,q2,a[1000005],b[1000005],dp[1005][1005],cnt1=1,cnt2=1;
int minn(int x1,int x2,int x3){
	if (x1<=x2&&x1<=x3) return x1;
	else if (x2<=x1&&x2<=x3) return x2;
	else if (x3<=x1&&x3<=x2) return x3;
}
int main(){
	memset(dp,0x3f3f3f3f,sizeof(dp));
	dp[0][0]=0;
	cin>>n>>x>>y>>z;
	for (int i=1;i<=n;i++){
		cin>>q1>>q2;
		for (int j=1;j<=q1;j++){
			a[cnt1++]=i;
		}
		for (int j=1;j<=q2;j++){
			b[cnt2++]=i;
		}
	}
	for (int i=1;i<=cnt2;i++){
		dp[0][i]=i*x;
	}
	for (int i=1;i<=cnt1;i++){
		dp[i][0]=i*y;
	}
	for (int i=1;i<=cnt1;i++){
		for (int j=1;j<=cnt2;j++){
			dp[i][j]=minn(dp[i-1][j]+y,dp[i][j-1]+x,dp[i-1][j-1]+z*abs(a[i]-b[i]));
		}
	}
	cout<<dp[cnt1][cnt2];
	return 0;
}
2024/7/1 15:37
加载中...