結果
問題 |
No.3158 Collect Stamps
|
ユーザー |
![]() |
提出日時 | 2025-05-23 19:49:16 |
言語 | Rust (1.83.0 + proconio) |
結果 |
AC
|
実行時間 | 65 ms / 2,000 ms |
コード長 | 949 bytes |
コンパイル時間 | 11,314 ms |
コンパイル使用メモリ | 386,788 KB |
実行使用メモリ | 12,800 KB |
最終ジャッジ日時 | 2025-05-23 19:49:32 |
合計ジャッジ時間 | 13,368 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 35 |
ソースコード
use proconio::{input, marker::Usize1}; fn main() { input! { n: usize, m: usize, k: usize, a: [Usize1; k], t: [[usize; n]; n], } let mut is_goal = vec![false; n]; for &a in &a { is_goal[a] = true; } let inf = 1usize << 60; let mut dp = vec![vec![inf; n]; 1 << n]; for i in 0..n { dp[1 << i][i] = 0; } let mut ans = inf; for bits in 0usize..1 << n { for i in 0..n { if bits >> i & 1 == 0 { continue; } if bits.count_ones() as usize >= m && is_goal[i] { ans = ans.min(dp[bits][i]); } for j in 0..n { if bits >> j & 1 == 1 { continue; } let nbits = bits | 1 << j; dp[nbits][j] = dp[nbits][j].min(dp[bits][i] + t[i][j]); } } } println!("{}", ans); }