比赛题解里已经相当详细了(考虑前缀最小和)
当需要在一行横着走的时候,如果这行电阻不是前缀最小值的时候,显然在前缀最小值那行走会更好。
#include<stdio.h>
#include<algorithm>
#define N 100005
using namespace std;
typedef long long ll;
ll D,ans;
int M,a[N],n;
int main()
{
scanf("%d",&n);ans=1LL<<61;
for (int i=0;i<=n;i++) scanf("%d",a+i);M=n+1;
for (int i=n;i;i--)
{
D+=a[M]+a[i];
ans=min(ans,D*2+(ll)a[i]*(4*i-1));
if (a[i]<a[M]||M==n+1) M=i;
}
printf("%lld",min(ans,(D+a[1]<<1)+a[0]));
}