結果
問題 |
No.519 アイドルユニット
|
ユーザー |
![]() |
提出日時 | 2025-03-15 16:05:33 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 69 ms / 1,000 ms |
コード長 | 656 bytes |
コンパイル時間 | 4,060 ms |
コンパイル使用メモリ | 279,952 KB |
実行使用メモリ | 143,964 KB |
最終ジャッジ日時 | 2025-03-15 16:05:39 |
合計ジャッジ時間 | 5,942 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 34 |
ソースコード
#include<bits/stdc++.h> #define int long long using namespace std; int a[30][30],dp[20000010]; bool f[20000010]; queue<int> q; signed main() { int n,x,i; cin>>n; for(i=1;i<=n;i++) { for(int j=1;j<=n;j++) cin>>a[i][j]; } q.push(0); while(!q.empty()) { x=q.front(); f[x]=0; q.pop(); i=0; for(;i<=n;i++) { if(((1<<i)&x)==0) break; } i++; for(int j=i+1;j<=n;j++) { if((x|(1<<(j-1)))==x) continue; int k=x|(1<<(i-1))|(1<<(j-1)); if(f[k]&&dp[x]+a[i][j]>dp[k]) dp[k]=dp[x]+a[i][j]; else if(!f[k]) { f[k]=1; dp[k]=dp[x]+a[i][j]; q.push(k); } } } cout<<dp[(1<<(n))-1]; return 0; }