#include<bits/stdc++.h>
using namespace std;
#define int long long
int dp[1505][10005];
struct node{
int k,b;
node(){}
int W(int x){
return x*(x-1)/2*k+b*x;
}
}c[1505];
int val(int x,int y){
return c[x].W(y);
}
int n;
signed main(){
memset(dp,0x3f,sizeof(dp));
scanf("%lld",&n);
for(int i=1;i<=n;i++){
scanf("%lld",&c[i].b);
}
for(int i=1;i<=n;i++){
scanf("%lld",&c[i].k);
}
for(int i=0;i<=n;i++) dp[i][0]=0;
for(int i=1;i<=n;i++){
int lim=sqrt(2*c[n].b/c[i].k)+500;
for(int j=1;j<=lim;j++){
for(int k=0;k<=j;k++){
if(2*k>=10000) break;
dp[i][j]=min(dp[i][j],dp[i-1][k*2]+val(i,j-k));
}
}
}
printf("%lld\n",dp[n][1]);
return 0;
}
为什么2改2.0就A了???