Submission #58332


ソースコード

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
/* dp[i+1][j|(1<<k)]=min(dp[i+1][j|(1<<k)],dp[i][j]+a[i][j]);
jはbitで表した時、いくつが埋まっているか。
答えはdp[N][(1<<N)-1]に入っている。
*/
#include<bits/stdc++.h>
#define INF 9223372036854775807LL
#define longinf 21047483647LL
#define inf 1000000007
#define SYOU(x) setprecision(x+1)
#define abs(x,y) (max(x,y)-min(x,y))
#define lol long long
#define mp make_pair
#define fi first
#define se second
using namespace std;
lol N,b,c,d;
int a[23][23];
lol dp1[(1<<20)],dp2[(1<<20)];
signed main(){
cin.tie(0);
ios::sync_with_stdio(false);
cin >>N;
for(int n=0;n<N;n++)
for(int m=0;m<N;m++) cin >>a[n][m];
for(int n=0;n<(1<<N);n++) dp1[n]=dp2[n]=longinf;
dp1[0]=0;
for(int i=0;i<N;i++){
for(lol j=0;j<(1<<N);j++){
if(dp1[j]!=longinf){
for(int k=0;k<N;k++){
dp2[j|(1<<k)]=min(dp2[j|(1<<k)],dp1[j]+a[i][k]);
}
}
}
for(int j=0;j<(1<<N);j++){
dp1[j]=dp2[j];
dp2[j]=longinf;
}
}
cout <<dp1[(1<<N)-1]<<'\n';
return (0);
}

ステータス

項目 データ
問題 1108 - 発表会
ユーザー名 ei1923
投稿日時 2020-01-30 16:10:44
言語 C++14
状態 Accepted
得点 1
ソースコード長 1069 Byte
最大実行時間 418 ms
最大メモリ使用量 17048 KB

セット

セット 得点 Cases
1 ALL 1 / 1 *

テストケース

ファイル名 状態 実行時間 メモリ使用量 #
case01.in AC 402 ms 16988 KB
1
case02.in AC 404 ms 16944 KB
1
case03.in AC 393 ms 17020 KB
1
case04.in AC 402 ms 16848 KB
1
case05.in AC 387 ms 16928 KB
1
case06.in AC 401 ms 16880 KB
1
case07.in AC 418 ms 16956 KB
1
case08.in AC 401 ms 16908 KB
1
case09.in AC 393 ms 16988 KB
1
case10.in AC 398 ms 16940 KB
1
case11.in AC 399 ms 16896 KB
1
case12.in AC 406 ms 16972 KB
1
case13.in AC 398 ms 17048 KB
1
case14.in AC 405 ms 16868 KB
1
case15.in AC 396 ms 16948 KB
1
case16.in AC 398 ms 17028 KB
1
case17.in AC 395 ms 16976 KB
1
case18.in AC 404 ms 16924 KB
1
case19.in AC 389 ms 17000 KB
1
case20.in AC 410 ms 16948 KB
1
sample01.in AC 36 ms 2564 KB
1
sample02.in AC 18 ms 2512 KB
1