結果
| 問題 | No.527 ナップサック容量問題 | 
| コンテスト | |
| ユーザー |  | 
| 提出日時 | 2017-08-22 00:34:39 | 
| 言語 | Rust (1.83.0 + proconio) | 
| 結果 | 
                                AC
                                 
                             | 
| 実行時間 | 21 ms / 2,000 ms | 
| コード長 | 2,266 bytes | 
| コンパイル時間 | 15,289 ms | 
| コンパイル使用メモリ | 378,744 KB | 
| 実行使用メモリ | 5,248 KB | 
| 最終ジャッジ日時 | 2024-10-15 00:56:49 | 
| 合計ジャッジ時間 | 17,397 ms | 
| ジャッジサーバーID (参考情報) | judge2 / judge3 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 3 | 
| other | AC * 37 | 
ソースコード
#![allow(unused_macros, unused_imports, dead_code)]
use std::io::*;
use std::collections::*;
fn read_line() -> String {
    let mut s = String::new();
    stdin().read_line(&mut s).unwrap();
    s
}
macro_rules! from_iter {
    ($($a:ident),+ = $it:expr) => {
        $(let $a;)+
        {
            let mut _it = $it.into_iter();
            $($a = _it.next().unwrap();)+
            assert!(_it.next().is_none());
        }
    };
}
macro_rules! from_str {
    ($($a:ident : $t:ty),+ = $s:expr) => {
        $(let $a: $t;)+
        {
            let mut _it = $s.split_whitespace();
            $($a = _it.next().unwrap().parse().unwrap();)+
            assert!(_it.next().is_none());
        }
    };
}
macro_rules! from_line {
    ($($a:ident : $t:ty),+) => {
        $(let $a: $t;)+
        {
            let _line = read_line();
            let mut _it = _line.trim().split_whitespace();
            $($a = _it.next().unwrap().parse().unwrap();)+
            assert!(_it.next().is_none());
        }
    };
}
macro_rules! print_var_fmt {
    ($e:expr) => {
        concat!(stringify!($e), ":\t{}")
    };
    ($e:expr, $($es: expr),+) => {
        concat!(print_var_fmt!($e), ",\t", print_var_fmt!($($es),+))
    };
}
macro_rules! dbg {
    ($($es:expr),+) => {
        writeln!(&mut io::stderr(), print_var_fmt!($($es),*), $($es),*);
    };
}
fn main() {
    from_line!(n: u32);
    let mut arr = vec![0; 100002];
    for _ in 0..n {
        from_line!(v: u32, w: u32);
        for i in (1..(100002-w as usize)).rev() {
            if arr[i] > 0 && arr[i] + v > arr[i+w as usize] {
                arr[i+w as usize] = arr[i] + v;
            }
        }
        if arr[w as usize] <= v { arr[w as usize] = v; }
    }
    from_line!(v: u32);
    let mut min = 0;
    for (i,x) in arr.iter().enumerate() {
        if *x == v {
            min = i;
            break;
        }
    }
    let mut max = min;
    for (i, x) in arr.iter().enumerate().skip(min + 1) {
        if *x <= v {
            max = i;
        }
        else {
            break;
        }
    }
    if min == 0 {
        println!("1");
    } else {
        println!("{}", min);
    }
    if max > 100000 {
        println!("inf");
    } else {
        println!("{}", max);
    }
}
            
            
            
        