use std::u64; use proconio::input; fn solve() -> u64 { input! { n: usize, ab: [(i64, i64); n], } let mut table = vec![i64::MIN; n + 1]; table[0] = 0; for &(ai, bi) in ab.iter() { let mut ntable = vec![i64::MIN; n + 1]; let mut atable = table.clone(); for i in 1..=n { atable[i] = atable[i-1].max(atable[i]); } for i in 0..=n { ntable[i.saturating_sub(1)] = table[i] + bi; } for i in 0..=n { ntable[i] = ntable[i].max(atable[i] + ai * i as i64); } table = ntable; } table[0] as u64 } fn main() { let ans = solve(); println!("{}", ans); }