#define _USE_MATH_DEFINES #include "bits/stdc++.h" using namespace std; #define FOR(i,j,k) for(int (i)=(j);(i)<(int)(k);++(i)) #define rep(i,j) FOR(i,0,j) #define each(x,y) for(auto &(x):(y)) #define mp make_pair #define MT make_tuple #define all(x) (x).begin(),(x).end() #define debug(x) cout<<#x<<": "<<(x)<; using vi = vector; using vll = vector; template void psort(vector &u, vector &v, bool isGreater = false) { int n = (int)u.size(); vector> vecP(n); for (int i = 0; i < n; ++i) { vecP[i].first = u[i]; vecP[i].second = v[i]; } if (isGreater) { sort(vecP.rbegin(), vecP.rend()); } else { sort(vecP.begin(), vecP.end()); } for (int i = 0; i < n; ++i) { u[i] = vecP[i].first; v[i] = vecP[i].second; } } void solve() { int N; cin >> N; const int M = N / 3; const ll INF = LLONG_MAX / 10; vll cu(M + 1, INF), ne(M + 1, INF); cu[0] = 0; vll A(N), B(N); rep(i, N) { cin >> A[i] >> B[i]; } psort(B, A, true); rep(i, N) { fill(all(ne), INF); for (int j = 0; j < min(i + 1, M + 1); j++) { // (i-j)*2日目に買う smin(ne[j], cu[j] + A[i]+B[i]*(i-j)); if (j < M)smin(ne[j + 1], cu[j]); } swap(cu, ne); } cout << cu.back() << endl; } int main() { ios::sync_with_stdio(false); cin.tie(0); cout << fixed << setprecision(15); solve(); return 0; }