http://codeforces.com/contest/355/problem/C
枚举L和R相交的位置。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 using namespace std; 5 const __int64 inf=1e19; 6 7 int n,l,r,ql,qr; 8 int w[100100]; 9 int sum1[100100]; 10 int sum2[100100]; 11 __int64 min1(__int64 a,__int64 b) 12 { 13 if(a>b) return b; 14 else return a; 15 } 16 17 int main() 18 { 19 while(scanf("%d%d%d%d%d",&n,&l,&r,&ql,&qr)!=EOF) 20 { 21 for(int i=1; i<=n; i++) 22 { 23 scanf("%d",&w[i]); 24 sum1[i]=sum1[i-1]+w[i]; 25 } 26 for(int i=n; i>=1; i--) 27 { 28 sum2[i]=sum2[i+1]+w[i]; 29 } 30 __int64 ans=inf; 31 for(int i=0; i<=n; i++) 32 { 33 int sum=(sum1[i]*l+sum2[i+1]*r); 34 if(i>n-i) sum+=(2*i-n-1)*ql; 35 else if(i<n-i) sum+=(n-2*i-1)*qr; 36 ans=min1(ans,(__int64)sum); 37 } 38 printf("%I64d ",ans); 39 } 40 return 0; 41 }