题意:机器人捡物品,要么从左边捡东西,要么从右边捡东西,在左边必须要左手,右边用右手,如果连续用一边的手需要额外的能量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 ; }