Submission #60544137


Source Code Expand

#[allow(unused_imports)]
use proconio::{input, marker::Usize1};

fn main() {
    input!{
        n: usize,
        x: usize,
        k: i64,
        mut items: [(usize, i64, Usize1); n],
    }
    let items = items.iter()
        .fold(vec![vec![]; n], |mut v, &(p, u, c)| {
            v[c].push((p, u));
            v
    });
    let inf :i64 = -1;
    let mut dp =vec![vec![inf; x+1]; 2];
    let mut cur = 0;
    dp[cur][0] = 0;
    for v in items.iter() {
        if v.is_empty() {
            continue;
        }
        let nxt = 1 - cur;
        for &(p, u) in v.iter() {
            for i in (0..=x).rev() {
                if dp[cur][i] != inf {
                    // 買わない
                    let val = dp[cur][i];
                    dp[nxt][i].chmax(val);
                }
                if i + p > x {
                    continue;
                }

                // cur -> nxt (k)
                if dp[cur][i] != inf {
                    let val = dp[cur][i] + u + k;
                    dp[nxt][i+p].chmax(val);

                }
                // nxt -> nxt
                if dp[nxt][i] != inf {
                    let val = dp[nxt][i] + u;
                    dp[nxt][i+p].chmax(val);
                }
            }
        }
        dp[cur].fill(inf);
        cur = nxt;
    }
    println!("{}", dp[cur].iter().max().unwrap());
}

pub trait ChLibs<T: std::cmp::Ord> {
    fn chmin(&mut self, elm: T) -> bool;
    fn chmax(&mut self, elm: T) -> bool;
}

impl<T: std::cmp::Ord> ChLibs<T> for T {
    fn chmin(&mut self, elm: T) -> bool {
        if *self > elm {
            *self = elm;
            true
        } else {
            false
        }
    }

    fn chmax(&mut self, elm: T) -> bool {
        if *self < elm {
            *self = elm;
            true
        } else {
            false
        }
    }
}
pub trait Debuggable {
    fn debug_string(&self) -> String;
}

impl<T: std::fmt::Debug + std::fmt::Display> Debuggable for Vec<T> {
    fn debug_string(&self) -> String {
        use itertools::Itertools;
        use std::iter::repeat;
        if let Some(max_size) = self.iter()
            .map(|x| format!("{:?}", x).len())
            .max() {
                let mut idx = String::from("idx |");   
                let mut val = String::from("val |");   
                for (i, xi) in self.iter().enumerate() {
                    idx.push_str(
                        &format!(" {:>w$} |", i, w=max_size)
                    );
                    val.push_str(
                        &format!(" {:>w$} |", xi, w=max_size)
                    );
                }

                format!("{}\n{}\n{}\n", idx, repeat('-').take(idx.len()).join(""), val)
            } else {
                format!("idx | \nval |\n")
            }
    }
}

impl<T: std::fmt::Debug + std::fmt::Display> Debuggable for std::collections::BTreeSet<T> {
    fn debug_string(&self) -> String {
        use itertools::Itertools;
        format!("{{ {} }}", self.iter().join(", "))
    }
}

impl<T, U> Debuggable for std::collections::BTreeMap<T, U> 
where T: std::fmt::Debug + std::fmt::Display, U: std::fmt::Debug + std::fmt::Display
{
    fn debug_string(&self) -> String {
        use itertools::Itertools;
        format!(
            "{{\n{}\n }}", self.iter()
                .map(|(k, v)| format!("{k} -> {v}, "))
                .join("\n")
        )
    }
}

// lg! マクロの定義
#[macro_export]
macro_rules! lg {
    ($val:expr) => {
        #[cfg(feature = "local")]
        {
            {
                use Debuggable;
                let val = &$val;
                eprintln!(
                    "[{}:{}] {} = \n{}",
                    file!(),
                    line!(),
                    stringify!($val),
                    val.debug_string()
                );
                val
            }
        }
    }
}
    

Submission Info

Submission Time
Task F - Diversity
User ardRiriy
Language Rust (rustc 1.70.0)
Score 525
Code Size 3891 Byte
Status AC
Exec Time 100 ms
Memory 2692 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 525 / 525
Status
AC × 3
AC × 58
Set Name Test Cases
Sample 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt
All 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 01_test_00.txt, 01_test_01.txt, 01_test_02.txt, 01_test_03.txt, 01_test_04.txt, 01_test_05.txt, 01_test_06.txt, 01_test_07.txt, 01_test_08.txt, 01_test_09.txt, 01_test_10.txt, 01_test_11.txt, 01_test_12.txt, 01_test_13.txt, 01_test_14.txt, 01_test_15.txt, 01_test_16.txt, 01_test_17.txt, 01_test_18.txt, 01_test_19.txt, 01_test_20.txt, 01_test_21.txt, 01_test_22.txt, 01_test_23.txt, 01_test_24.txt, 01_test_25.txt, 01_test_26.txt, 01_test_27.txt, 01_test_28.txt, 01_test_29.txt, 01_test_30.txt, 01_test_31.txt, 01_test_32.txt, 01_test_33.txt, 01_test_34.txt, 01_test_35.txt, 01_test_36.txt, 01_test_37.txt, 01_test_38.txt, 01_test_39.txt, 01_test_40.txt, 01_test_41.txt, 01_test_42.txt, 01_test_43.txt, 01_test_44.txt, 01_test_45.txt, 01_test_46.txt, 01_test_47.txt, 01_test_48.txt, 01_test_49.txt, 01_test_50.txt, 01_test_51.txt, 01_test_52.txt, 01_test_53.txt, 01_test_54.txt
Case Name Status Exec Time Memory
00_sample_00.txt AC 1 ms 1980 KiB
00_sample_01.txt AC 0 ms 1928 KiB
00_sample_02.txt AC 0 ms 2016 KiB
01_test_00.txt AC 0 ms 2088 KiB
01_test_01.txt AC 1 ms 1984 KiB
01_test_02.txt AC 1 ms 2136 KiB
01_test_03.txt AC 11 ms 2548 KiB
01_test_04.txt AC 2 ms 2440 KiB
01_test_05.txt AC 54 ms 2624 KiB
01_test_06.txt AC 46 ms 2320 KiB
01_test_07.txt AC 45 ms 2120 KiB
01_test_08.txt AC 26 ms 2060 KiB
01_test_09.txt AC 56 ms 2416 KiB
01_test_10.txt AC 28 ms 2148 KiB
01_test_11.txt AC 89 ms 2672 KiB
01_test_12.txt AC 85 ms 2584 KiB
01_test_13.txt AC 4 ms 2008 KiB
01_test_14.txt AC 1 ms 1960 KiB
01_test_15.txt AC 1 ms 1960 KiB
01_test_16.txt AC 47 ms 2236 KiB
01_test_17.txt AC 48 ms 2292 KiB
01_test_18.txt AC 48 ms 2412 KiB
01_test_19.txt AC 47 ms 2232 KiB
01_test_20.txt AC 46 ms 2396 KiB
01_test_21.txt AC 47 ms 2412 KiB
01_test_22.txt AC 73 ms 2620 KiB
01_test_23.txt AC 38 ms 2344 KiB
01_test_24.txt AC 1 ms 2116 KiB
01_test_25.txt AC 60 ms 2692 KiB
01_test_26.txt AC 100 ms 2616 KiB
01_test_27.txt AC 93 ms 2680 KiB
01_test_28.txt AC 45 ms 2124 KiB
01_test_29.txt AC 81 ms 2648 KiB
01_test_30.txt AC 69 ms 2236 KiB
01_test_31.txt AC 94 ms 2592 KiB
01_test_32.txt AC 92 ms 2628 KiB
01_test_33.txt AC 83 ms 2624 KiB
01_test_34.txt AC 40 ms 2192 KiB
01_test_35.txt AC 86 ms 2284 KiB
01_test_36.txt AC 86 ms 2284 KiB
01_test_37.txt AC 51 ms 2292 KiB
01_test_38.txt AC 51 ms 2280 KiB
01_test_39.txt AC 64 ms 2344 KiB
01_test_40.txt AC 64 ms 2356 KiB
01_test_41.txt AC 79 ms 2344 KiB
01_test_42.txt AC 79 ms 2384 KiB
01_test_43.txt AC 88 ms 2544 KiB
01_test_44.txt AC 88 ms 2628 KiB
01_test_45.txt AC 65 ms 2376 KiB
01_test_46.txt AC 65 ms 2404 KiB
01_test_47.txt AC 81 ms 2280 KiB
01_test_48.txt AC 81 ms 2228 KiB
01_test_49.txt AC 5 ms 1880 KiB
01_test_50.txt AC 4 ms 2020 KiB
01_test_51.txt AC 2 ms 1932 KiB
01_test_52.txt AC 2 ms 1992 KiB
01_test_53.txt AC 32 ms 2112 KiB
01_test_54.txt AC 32 ms 2088 KiB