125912024-12-26 10:50:14sarminZebra (75 pont)cpp17Elfogadva 75/753ms508 KiB
#include <bits/stdc++.h>
using namespace std;

int main() {

	int n; cin >> n;
	vector<int> a, b;
	vector<int> bi(n);
	for (int i = 0; i < n; i++) {
		cin >> bi[i];
	}
	
	for (int i = 0; i < n; i++) {
		int x; cin >> x;
		((bi[i] == 0) ? a : b).push_back(x);
	}
	
	int aSize = (int) a.size(), bSize = (int) b.size();
	vector<int> prefa(aSize + 1), prefb(bSize + 1);
	for (int i = 0; i < aSize; i++) {
		prefa[i + 1] = prefa[i] + a[i];
	}

	for (int i = 0; i < bSize; i++) {
		prefb[i + 1] = prefb[i] + b[i];
	}

	vector<vector<int>> dp(aSize + 1, vector<int>(bSize + 1, -1));
	dp[0][0] = 0;
	for (int i = 0; i < aSize; i++) {
		for (int j = 0; j < bSize; j++) {
			int mmm = max(a[i], b[j]);

			int mini = INT_MAX;
			for (int k = 0; k <= i; k++) { // a balra első
				for (int l = 0; l <= j; l++) { // b balra első
					if (dp[k][l] == -1) continue;
					int awaiting = mmm * (i - k + 1) - (prefa[i + 1] - prefa[k]);
					int bwaiting = mmm * (j - l + 1) - (prefb[j + 1] - prefb[l]);
					mini = min(mini, dp[k][l] + awaiting + bwaiting);
				}
			}
			dp[i + 1][j + 1] = mini;
		}
	}
	cout << dp[aSize][bSize] << endl;
	
	return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base75/75
1Elfogadva0/01ms320 KiB
2Elfogadva0/02ms320 KiB
3Elfogadva5/51ms508 KiB
4Elfogadva5/51ms320 KiB
5Elfogadva5/51ms320 KiB
6Elfogadva5/52ms508 KiB
7Elfogadva5/52ms412 KiB
8Elfogadva5/52ms508 KiB
9Elfogadva5/52ms320 KiB
10Elfogadva5/52ms412 KiB
11Elfogadva5/52ms332 KiB
12Elfogadva5/52ms392 KiB
13Elfogadva5/53ms412 KiB
14Elfogadva5/52ms392 KiB
15Elfogadva5/52ms320 KiB
16Elfogadva5/53ms320 KiB
17Elfogadva5/53ms412 KiB