#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define rep(i, m, n) for(int i=int(m);i inline void chmin(T1 &a, T2 b) { if (a > b) a = b; } template inline void chmax(T1 &a, T2 b) { if (a < b) a = b; } //改造 typedef long long int ll; using namespace std; #define INF (1 << 30) - 1 #define INFl (ll)5e15 #define DEBUG 0 //デバッグする時1にしてね #define dump(x) cerr << #x << " = " << (x) << endl #define MOD 1000000007 //ここから編集する class Solve { public: int N; using P = pair; vector

vp; void input() { cin >> N; vp.resize(N); rep(i, 0, N) { cin >> vp[i].first >> vp[i].second; } sort(all(vp), [](P a, P b) { return a.second > b.second; }); } ll calc() { int final = N - N / 3; set st; for (int i = 0; i < N; ++i) st.insert(i); //高い奴らを除去 vector> dp(N + 1, vector(N + 1, INFl)); dp[0][0] = 0; for (int j = 0; j < N; ++j) { for (int i = j; i < N; ++i) { chmin(dp[i + 1][j + 1], dp[i][j]); chmin(dp[i + 1][j], dp[i][j] + vp[i].first + vp[i].second * (i - j)); } } return dp[N][N / 3]; } void solve() { input(); ll ans = calc(); cout << ans << endl; } }; int main() { cin.tie(0); ios::sync_with_stdio(false); cout << fixed << setprecision(10); Solve().solve(); return 0; }