제출 #1247379

#제출 시각아이디문제언어결과실행 시간메모리
1247379MateiKing80Building Bridges (CEOI17_building)C++20
30 / 100
3093 ms4164 KiB
#include <bits/stdc++.h>

using namespace std;

using ll = long long;
#define int ll

const int inf = 1e17;

/*
dp[i] costu minim pana la i
dp[i] = min(dp[j] + (hi - hj)^2 + w_i-1 + .. + w_j+1)
dp[i] = min((dp[j] + hj^2 - w_1 - w_2 - .. - w_j) + (-2hj) * hi) + w_1 + w_2 + ... + w_i-1 + h_i^2
LiChAo
*/

signed main() {
	int n;
	cin >> n;
	vector<int> dp(n + 1), coef(n + 1), inm(n + 1), w(n + 1), h(n + 1);
	for (int i = 1; i <= n; i ++)
		cin >> h[i];
	for (int i = 1; i <= n; i ++)
		cin >> w[i];
	dp[1] = 0;
	coef[1] = h[1] * h[1] - w[1];
	inm[1] = -2 * h[1];
	int sumw = 0;
	for (int i = 2; i <= n; i ++) {
		sumw += w[i - 1];
		int mn = inf;
		for (int j = 1; j < i; j ++)
			mn = min(mn, coef[j] + inm[j] * h[i]);
		dp[i] = mn + sumw + h[i] * h[i];
		coef[i] = dp[i] + h[i] * h[i] - sumw - w[i];
		inm[i] = -2 * h[i];
	}
	cout << dp[n] << '\n';
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...