#include #define fst(t) std::get<0>(t) #define snd(t) std::get<1>(t) #define thd(t) std::get<2>(t) #define unless(p) if(!(p)) #define until(p) while(!(p)) using ll = std::int64_t; using P = std::tuple; int N, M; P ps[2100]; ll dp[2100][2100]; ll rec(int i, int n, int m){ if(i == N){ return 0; } if(dp[i][n] != -1){ return dp[i][n]; } ll mn = std::numeric_limits::max(); ll B, A; std::tie(B, A) = ps[i]; if(n < N - M){ mn = A + B * n + rec(i + 1, n + 1, m); } if(m < M){ mn = std::min(mn, rec(i + 1, n, m + 1)); } return dp[i][n] = mn; } int main(){ std::cin.tie(nullptr); std::ios::sync_with_stdio(false); std::cin >> N; M = N / 3; for(int i=0;i> A >> B; ps[i] = std::make_tuple(B, A); } std::sort(ps, ps + N); std::reverse(ps, ps + N); memset(dp, -1, sizeof(dp)); ll mn = rec(0, 0, 0); std::cout << mn << std::endl; }