Submission #538704

#TimeUsernameProblemLanguageResultExecution timeMemory
538704xuliuBuilding Bridges (CEOI17_building)C++17
30 / 100
3048 ms4480 KiB
#include <bits/stdc++.h>

using namespace std;

#define ll long long 
#define ld long double 
#define debug if(0)

const ll inf = 1e18 + 4;

int main() {
	ios_base::sync_with_stdio(0); cin.tie(0);
	int n; cin>>n;
	vector<ll> h(n), w(n), wpref(n);
	for(int i=0; i<n; i++) cin>>h[i];
	for(int i=0; i<n; i++) {
		cin>>w[i];
		wpref[i] = (i ? wpref[i-1] : 0) + w[i];
	}
	auto wseg = [&](int a, int b) {
		return wpref[b] - (a ? wpref[a-1] : 0);
	};
	vector<ll> dp(n, inf);
	dp[0] = 0;
	for(int i=1; i<n; i++) {
		for(int j=i-1; j>=0; j--) {
			ll res = dp[j] + (h[i] - h[j])*(h[i] - h[j]);
			if(j+1 != i) res += wseg(j+1, i-1);
			dp[i] = min(dp[i], res);
		}
	}
	cout<<dp[n-1];
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...