結果
| 問題 | No.3158 Collect Stamps | 
| コンテスト | |
| ユーザー |  Moss_Local | 
| 提出日時 | 2025-05-23 20:18:19 | 
| 言語 | Rust (1.83.0 + proconio) | 
| 結果 | 
                                AC
                                 
                             | 
| 実行時間 | 31 ms / 2,000 ms | 
| コード長 | 4,753 bytes | 
| コンパイル時間 | 10,849 ms | 
| コンパイル使用メモリ | 399,560 KB | 
| 実行使用メモリ | 12,800 KB | 
| 最終ジャッジ日時 | 2025-05-23 20:18:32 | 
| 合計ジャッジ時間 | 12,374 ms | 
| ジャッジサーバーID (参考情報) | judge2 / judge3 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 3 | 
| other | AC * 35 | 
コンパイルメッセージ
warning: variable does not need to be mutable
   --> src/main.rs:119:9
    |
119 |     let mut vec: Vec<i64> = read_vec();
    |         ----^^^
    |         |
    |         help: remove this `mut`
    |
    = note: `#[warn(unused_mut)]` on by default
warning: variable does not need to be mutable
   --> src/main.rs:125:9
    |
125 |     let mut vec: Vec<i64> = read_vec();
    |         ----^^^
    |         |
    |         help: remove this `mut`
warning: variable does not need to be mutable
   --> src/main.rs:130:9
    |
130 |     let mut vec: Vec<usize> = read_vec();
    |         ----^^^
    |         |
    |         help: remove this `mut`
warning: variable does not need to be mutable
   --> src/main.rs:136:9
    |
136 |     let mut vec: Vec<f64> = read_vec();
    |         ----^^^
    |         |
    |         help: remove this `mut`
warning: variable does not need to be mutable
   --> src/main.rs:141:9
    |
141 |     let mut vec: Vec<char> = read_vec();
    |         ----^^^
    |         |
    |         help: remove this `mut`
warning: variable does not need to be mutable
   --> src/main.rs:146:9
    |
146 |     let mut vec: Vec<usize> = read_vec();
    |         ----^^^
    |         |
    |         help: remove this `mut`
warning: variable does not need to be mutable
   --> src/main.rs:151:9
    |
151 |     let mut vec: Vec<i64> = read_vec();
    |         ----^^^
    |         |
    |         help: remove this `mut`
warning: variable does not need to be mutable
   --> src/main.rs:157:9
    |
157 |     let mut vec: Vec<usize> = read_vec();
    |         ----^^^
    |         |
    |         help: remove this `mut`
warning: variable does not need to be mutable
   --> src/main.rs:164:9
    |
164 |     let mut aa: Vec<usize> = read_vec();
    |         ----^^
    |         |
    |         help: remove this `mut`
            
            ソースコード
// -*- coding:utf-8-unix -*-
// #![feature(map_first_last)]
#![allow(dead_code)]
#![allow(unused_imports)]
#![allow(unused_macros)]
// use core::num;
use std::cmp::*;
use std::fmt::*;
use std::hash::*;
use std::io::BufRead;
use std::iter::FromIterator;
use std::*;
use std::{cmp, collections, fmt, io, iter, ops, str};
const INF: i64 = 1223372036854775807;
const UINF: usize = INF as usize;
const LINF: i64 = 2147483647;
const INF128: i128 = 1223372036854775807000000000000;
const MOD1: i64 = 1000000007;
const MOD9: i64 = 998244353;
const MOD: i64 = MOD9;
// const MOD: i64 = MOD2;
const UMOD: usize = MOD as usize;
const M_PI: f64 = 3.14159265358979323846;
// use proconio::input;
// const MOD: i64 = INF;
use cmp::Ordering::*;
use std::collections::*;
use std::io::stdin;
use std::io::stdout;
use std::io::Write;
macro_rules! p {
    ($x:expr) => {
        //if expr
        println!("{}", $x);
    };
}
macro_rules! vp {
    // vector print sd1arate with space
    ($x:expr) => {
        println!(
            "{}",
            $x.iter()
                .map(|x| x.to_string())
                .collect::<Vec<_>>()
                .join(" ")
        );
    };
}
macro_rules! d {
    ($x:expr) => {
        println!("{:?}", $x);
    };
}
macro_rules! yn {
    ($val:expr) => {
        if $val {
            println!("Yes");
        } else {
            println!("No");
        }
    };
}
macro_rules! map{
    // declear btreemap
    ($($key:expr => $val:expr),*) => {
        {
            let mut map = ::std::collections::BTreeMap::new();
            $(
                map.insert($key, $val);
            )*
            map
        }
    };
}
macro_rules! set{
    // declear btreemap
    ($($key:expr),*) => {
        {
            let mut set = ::std::collections::BTreeSet::new();
            $(
                set.insert($key);
            )*
            set
        }
    };
}
//input output
#[allow(dead_code)]
fn read<T: std::str::FromStr>() -> T {
    let mut s = String::new();
    std::io::stdin().read_line(&mut s).ok();
    s.trim().parse().ok().unwrap()
}
#[allow(dead_code)]
fn read_vec<T: std::str::FromStr>() -> Vec<T> {
    read::<String>()
        .split_whitespace()
        .map(|e| e.parse().ok().unwrap())
        .collect()
}
#[allow(dead_code)]
fn read_mat<T: std::str::FromStr>(n: u32) -> Vec<Vec<T>> {
    (0..n).map(|_| read_vec()).collect()
}
#[allow(dead_code)]
fn readii() -> (i64, i64) {
    let mut vec: Vec<i64> = read_vec();
    (vec[0], vec[1])
}
#[allow(dead_code)]
fn readiii() -> (i64, i64, i64) {
    let mut vec: Vec<i64> = read_vec();
    (vec[0], vec[1], vec[2])
}
#[allow(dead_code)]
fn readuu() -> (usize, usize) {
    let mut vec: Vec<usize> = read_vec();
    (vec[0], vec[1])
}
#[allow(dead_code)]
fn readff() -> (f64, f64) {
    let mut vec: Vec<f64> = read_vec();
    (vec[0], vec[1])
}
fn readcc() -> (char, char) {
    let mut vec: Vec<char> = read_vec();
    (vec[0], vec[1])
}
fn readuuu() -> (usize, usize, usize) {
    let mut vec: Vec<usize> = read_vec();
    (vec[0], vec[1], vec[2])
}
#[allow(dead_code)]
fn readiiii() -> (i64, i64, i64, i64) {
    let mut vec: Vec<i64> = read_vec();
    (vec[0], vec[1], vec[2], vec[3])
}
#[allow(dead_code)]
fn readuuuu() -> (usize, usize, usize, usize) {
    let mut vec: Vec<usize> = read_vec();
    (vec[0], vec[1], vec[2], vec[3])
}
fn main() {
    let (n, m, k) = readuuu();
    let mut prize = vec![false; n];
    let mut aa: Vec<usize> = read_vec();
    for i in 0..k {
        let a = aa[i];
        prize[a - 1] = true;
    }
    let mut t: Vec<Vec<i64>> = vec![vec![0; n]; n];
    for i in 0..n {
        t[i] = read_vec();
    }
    let inf = INF;
    let max = 1 << n;
    let mut dp = vec![vec![inf; n]; max];
    for i in 0..n {
        dp[1 << i][i] = 0;
    }
    for mask in 1..max {
        let cnt = mask.count_ones() as usize;
        if cnt >= m {
            continue;
        }
        for v in 0..n {
            let d = dp[mask][v];
            if d == inf {
                continue;
            }
            let mut rem = (!mask) & (max - 1);
            while rem != 0 {
                let u = rem.trailing_zeros() as usize;
                rem &= rem - 1;
                let nm = mask | (1 << u);
                let nd = d + t[v][u];
                if nd < dp[nm][u] {
                    dp[nm][u] = nd;
                }
            }
        }
    }
    let mut ans = inf;
    for mask in 1..max {
        if (mask.count_ones() as usize) < m {
            continue;
        }
        for i in 0..n {
            if prize[i] {
                let d = dp[mask][i];
                if d < ans {
                    ans = d;
                }
            }
        }
    }
    println!("{}", ans);
}
            
            
            
        