結果
問題 |
No.3158 Collect Stamps
|
ユーザー |
![]() |
提出日時 | 2025-05-23 19:26:34 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 396 ms / 2,000 ms |
コード長 | 667 bytes |
コンパイル時間 | 378 ms |
コンパイル使用メモリ | 81,896 KB |
実行使用メモリ | 89,888 KB |
最終ジャッジ日時 | 2025-05-23 19:26:43 |
合計ジャッジ時間 | 6,868 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 35 |
ソースコード
N,M,K=map(int,input().split()) A=list(map(int,input().split())) u=[False]*N for i in range(K): A[i]-=1 u[A[i]]=True dp=[[10**10]*(N) for i in range(2**N)] dist=[list(map(int,input().split())) for i in range(N)] for i in range(N): dp[2**i][i]=0 for bit in range(1,2**N): for j in range(N): if dp[bit][j]>=10**9: continue for k in range(N): if (bit>>k)&1: continue dp[bit+2**k][k]=min(dp[bit+2**k][k],dp[bit][j]+dist[j][k]) result=10**10 for bit in range(1,2**N): c=0 for k in range(N): if (bit>>k)&1: c+=1 if c>=M: for j in range(N): if u[j]==True: result=min(result,dp[bit][j]) print(result)