Vasya and Robot
// 我们可以枚举从前面和从后面操作相交的位置 // 在 i 位置相交,前面有 i 个数 后面有 n-i 个数 // 为求最优 我们得花费额外 ql*(left-right-1) ; 或者 qr*(right-left-1) ; #include<iostream> #include<cstdio> using namespace std ; const int maxn = 100002 ; int ans[maxn] , a[maxn] ; int min( int a , int b ){ return a < b ? a : b ;} int maivn() { int i , minv , n , left , right ; int l , r , ql , qr ,cost ; // freopen("in.txt","r",stdin) ; while( cin >> n >> l >> r >> ql >> qr ) { for( i = 1 ; i <= n ;i++ ) scanf("%d" , &a[i]) ; ans[0] = ans[n+1] = 0 ; minv = 2000000000 ; for( i = 1 ; i <= n ;i++ ) ans[i] = ans[i-1]+a[i] ; for( i = 0 ; i <= n ;i++ ) { cost = l*ans[i]+r*(ans[n]-ans[i]) ; right = n-i ; left = i ; if( left > right ) { cost += ql*(left-right-1) ; } else if(right > left ) { cost += qr*(right-left-1) ; } minv = min(minv,cost) ; } cout << minv << endl ; } }