比赛 NOIP2025模拟赛2 评测结果 AAAAAAWWWWAAAAAW
题目名称 桥梁建设 最终得分 69
用户昵称 李奇文 运行时间 7.879 s
代码语言 C++ 内存使用 5.81 MiB
提交时间 2025-11-25 11:05:29
显示代码纯文本
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+5,inf=1e15;
int n,sum[N];
int h[N],w[N],f[N];
/*void solve(){
	int ans1=(h[n]-h[1])*(h[n]-h[1])+sum[n-1]-sum[1];
	int ans2=inf;
	for(int j=2;j<n;j++){
		ans2=min(ans2,(h[n]-h[j])*(h[n]-h[j])+(h[j]-h[1])*(h[j]-h[1])+sum[n-1]-sum[1]+sum[j-1]-sum[j]);
	}
	int ans3=h[1]*h[1]+h[n]*h[n]+sum[n-1]-sum[1],res=inf;
	for(int i=3;i<n;++i){
		for(int j=2;j<i;++j){
			res=min(res,2*h[i]*h[i]+2*h[j]*h[j]-w[i]-w[j]-2*h[1]*h[i]-2*h[i]*h[j]-2*h[j]*h[n]);
		}
	}
	ans3+=res;	
	cout<<min(ans1,min(ans2,ans3))<<"\n";
	cout<<min(ans1,ans2)<<"\n";
	return;
}*/
signed main(){
	freopen("building.in","r",stdin);
	freopen("building.out","w",stdout);
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	cin>>n;
	for(int i(1);i<=n;++i){
		cin>>h[i];
	}
	for(int i(1);i<=n;++i){
		cin>>w[i];
		sum[i]=sum[i-1]+w[i];
	}
	/*if(n>2000){
		solve();
		return 0;
	}*/
	for(int i(2);i<=n;++i){
		f[i]=sum[i-1]+h[i]*h[i];
		int res=f[1]-sum[1]-2*h[i]*h[1]+h[1]*h[1];
		for(int j(i-1);j>=max(i-5000ll,1ll);j--){
			res=min(res,f[j]-sum[j]-2*h[i]*h[j]+h[j]*h[j]);
		}
		f[i]+=res;
	}
	cout<<f[n]<<"\n";
	return 0;
}