| 比赛 |
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;
}