/* @JUDGE_ID: 32472GK 1031 C++ */ #include #include #include #include #include #include #include #include #include #include #include using namespace std; int solve( const vector& dis, int L1, int L2, int L3, int C1, int C2, int C3 ) { vector min_cost( dis.size()+1, INT_MAX ); min_cost[0] = 0; for(int d=1; d!=min_cost.size(); ++d) { // fill min_cost[d] ... int Dist=0; for(int s=d-1; s>=0; --s) { Dist += dis[s]; int upd_cost = INT_MAX; if( Dist > L3 ) break; else if( Dist > L2 ) upd_cost = min_cost[s] + C3; else if( Dist > L1 ) upd_cost = min_cost[s] + C2; else upd_cost = min_cost[s] + C1; //cout << "u: " << upd_cost <> L1 >> L2 >> L3 >> C1 >> C2 >> C3; cin >> N; cin >> S >> D; if(S>D) swap(S,D); vector dis; // dis[i] := abs([i+1]-[i]) for(int i=0; i!=N-1; ++i) { int d; cin >> d; dis.push_back(d); } vector dis_c(dis.size()); adjacent_difference(dis.begin(), dis.end(), dis_c.begin()); vector dis_d; for(int i=S; i!=D; ++i) dis_d.push_back( dis_c[i-1] ); cout << solve(dis_d,L1,L2,L3,C1,C2,C3) << endl; }