blog.bouzuya.net

2023-01-14 online-sitemap-builder 0.1.0 をつくった / ABC015 の A, B, C, D を解いた

online-sitemap-builder 0.1.0 をつくった。 https://bouzuya.net/lab/online-sitemap-builder 。ソースコードは bouzuya/rust-sandbox の online-sitemap-builder に置いてある。

週の目標の達成と crates:yew の最低限の動作確認と bouzuya/rust-sandbox の sitemaps 改め sitemap-xml を試すためのもの。正直なところ、やっつけなので出すのが恥ずかしい。

sitemap-xml は 0.4.0 くらいまで上げるつもりで良さそうなら crates.io に公開することも考えている。それに合わせて online-sitemap-builder も lastmod などの指定などある程度のバージョンアップはすると思う。

そも sitemap.xml はおそらく手書きするものではなく自動生成されるものだと思うので、このアプリケーションには実用性がほとんどない。あえて sitemap 関連で何かやるならクローラーをつくって探索・生成させるようなものとか何か特殊なことをしないとまずそう。入力してボタンで追加みたいな UI をつけるよりも、優れた既存の editor コンポーネントを使って XML を編集可能にするほうが良いまでありそう。


ABC015 : AtCoder Beginner Contest 015 の A, B, C, D を解いた。

use proconio::input;

macro_rules! chmax {
    ($max_v: expr, $v: expr) => {
        if $v > $max_v {
            $max_v = $v;
            true
        } else {
            false
        }
    };
}

fn main() {
    input! {
        w: usize,
        n: usize,
        k: usize,
        ab: [(usize, usize); n],
    };
    let mut dp = vec![vec![0_usize; k + 1]; w + 1];
    for (a, b) in ab.iter().copied() {
        let mut next = vec![vec![0_usize; k + 1]; w + 1];
        for j in 0..=k {
            for l in 0..=w {
                chmax!(next[l][j], dp[l][j]);
                if j + 1 <= k && l + a <= w {
                    chmax!(next[l + a][j + 1], dp[l][j] + b);
                }
            }
        }
        dp = next;
    }
    let ans = dp
        .iter()
        .map(|dp_i| dp_i.iter().max().unwrap())
        .max()
        .unwrap();
    println!("{}", ans);
}

今日のコミット。