use proconio::*; fn main(){ input!{ n: usize, mut w: [(usize,usize); n] } w.sort_by_cached_key(|(x, y)| x+y); let mut dp = vec![false; 20001]; dp[0]=true; for i in 0..n{ let vi=w[i].0; for j in (0..w[i].1).rev(){ dp[j+vi] |= dp[j]; } } let ans=(0..20001).filter(|&i| dp[i]).max().unwrap(); println!("{}", ans); }