#include "bits/stdc++.h" using namespace std; typedef long long ll; typedef pair P; #define rep(i, n) for(ll (i) = 0; (i) < (n); (i)++) #define rep1(i, n) for(ll (i) = 1; (i) <= (n); (i)++) #define rrep(i, n) for(ll (i) = (n) - 1; (i) >= 0; (i)--) #define rrep1(i, n) for(ll (i) = (n); (i) >= 1; (i)--) const ll INF = 1145141919; const ll MOD = 1000000007; template void chmax(T &a, const T &b){if(a < b){a = b;}} template void chmin(T &a, const T &b){if(a > b){a = b;}} template bool find_from_set(set &S, const T &t){ return S.find(t) != S.end(); } typedef pair LP; int main(){ ll N; cin >> N; vectorA(N), B(N); rep(i, N)cin >> A[i] >> B[i]; priority_queue, greater >Q; set

S; Q.push(LP(A[0] * 2, P(1, A[0]))); while(!Q.empty()){ ll cst = Q.top().first; P p = Q.top().second; Q.pop(); if(find_from_set(S, p))continue; S.insert(p); ll idx = p.first, mum = p.second; if(idx == N){ cout << cst << endl; break; } Q.push(LP(cst + A[idx] * 2, P(idx + 1, A[idx]))); cst += A[idx] + B[idx]; if(mum > A[idx]){ cst -= mum; cst += A[idx]; } Q.push(LP(cst, P(idx + 1, min(A[idx], mum)))); } return 0; }