题意:机器人捡物品,要么从左边捡东西,要么从右边捡东西,在左边必须要左手,右边用右手,如果连续用一边的手需要额外的能量QL和QR,而交替使用手只需要耗费W*L;
问最少耗费的能量。
思路:一次枚举(1~n)个位置,先当然是交替使用左右手是最好的,但由于i并不是对称的,所以划掉能交替使用手的部分,i就是最后机器人留在的位置,剩下只能一边手使用了。
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#define INF 1000000000
using namespace std ;
const int N=100010;
int sum[N],w;
int main()
{
int n,l,r,ql,qr;
scanf("%d %d %d %d %d",&n,&l,&r,&ql,&qr);
sum[0]=0;
for(int i=1;i<=n;i++){
scanf("%d",&w);
sum[i]=sum[i-1]+w;
}
int ans=INF,tmp;
for(int i=0;i<=n;i++){
tmp=l*sum[i]+(sum[n]-sum[i])*r;
if(i>n-i) tmp+=ql*(i-n+i-1);
else if(n-i>i) tmp+=qr*(n-i-i-1);
ans=min(tmp,ans);
}
printf("%d\n",ans);
return 0 ;
}