結果
問題 | No.2955 Pizza Delivery Plan |
ユーザー |
![]() |
提出日時 | 2024-11-08 21:29:11 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 295 ms / 2,000 ms |
コード長 | 1,078 bytes |
コンパイル時間 | 190 ms |
コンパイル使用メモリ | 82,816 KB |
実行使用メモリ | 80,000 KB |
最終ジャッジ日時 | 2024-11-08 21:29:18 |
合計ジャッジ時間 | 7,535 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 28 |
ソースコード
N,K=map(int,input().split())X,Y=[],[]for i in range(N):x,y=map(int,input().split())X.append(x)Y.append(y)def dist(i,j):if j==-1:i,j=j,iif i==-1:return (X[j]**2+Y[j]**2)**.5return ((X[i]-X[j])**2+(Y[i]-Y[j])**2)**.5inf=1e20dp=[[inf]*N for bit in range(1<<N)]for bit in range(1<<N):for n in range(N):if bit&1<<n:if bit==1<<n:dp[bit][n]=min(dp[bit][n],dist(-1,n))else:for m in range(N):if n==m:continueif not bit&1<<m:continuedp[bit][n]=min(dp[bit][n],dp[bit^1<<n][m]+dist(n,m))DP=[inf]*(1<<N)for bit in range(1<<N):for n in range(N):DP[bit]=min(DP[bit],dp[bit][n]+dist(n,-1))DP[0]=0dp=DPDP=[inf]*(1<<N)DP[0]=0for bit in range(1<<N):subset=bitwhile subset:if subset.bit_count()<=K:DP[bit]=min(DP[bit],DP[subset^bit]+dp[subset])subset-=1subset&=bitans=DP[-1]print(ans)