結果

問題 No.519 アイドルユニット
ユーザー 小夫
提出日時 2025-03-30 14:52:35
言語 C++17
(gcc 13.3.0 + boost 1.87.0)
結果
AC  
実行時間 898 ms / 1,000 ms
コード長 1,266 bytes
コンパイル時間 2,095 ms
コンパイル使用メモリ 199,196 KB
実行使用メモリ 71,388 KB
最終ジャッジ日時 2025-03-30 14:52:46
合計ジャッジ時間 10,236 ms
ジャッジサーバーID
(参考情報)
judge4 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 34
権限があれば一括ダウンロードができます

ソースコード

diff #
プレゼンテーションモードにする

#include<bits/stdc++.h>
using namespace std;
inline int read()
{
int x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9')
{
if(ch=='-')f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9')
{
x=(x<<1)+(x<<3)+(ch&15);
ch=getchar();
}
return x*f;
}
inline void write(int x)
{
if(x<0)x=-x,putchar('-');
if(x>9)write(x/10);
putchar(x%10+48);
return;
}
const int M=30,N=2e7+7,INF=0x3f3f3f3f;
struct node{int v,w;};
vector<node>mp[M];
int n,ans,kk[M][M],st[N],f[N];
inline void dfs(int u,int res)
{
if(u>n)
{
ans=max(res,ans);
return;
}
for(auto t:mp[u])
{
int v=t.v,w=t.w;
if(st[v])continue;
st[u]=v;
st[v]=u;
int k=u;
while(st[k])++k;
dfs(k,res+w);
st[u]=0;
st[v]=0;
}
}
mt19937 dg(time(0));
int main()
{
n=read();
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j)
{
kk[i][j]=read();
if(~kk[i][j])mp[i].emplace_back((node){j,kk[i][j]});
}
if(n<=16)dfs(1,0);
else
{
for(int S=3;S<(1<<n);++S)
{
if(__builtin_popcount(S)&1)continue;
int cnt=0;
for(int j=0;j<n;++j)if((1<<j)&S)st[++cnt]=j;
for(int j=2;j<=cnt;++j)
f[S]=max(f[S],f[S-(1<<st[1])-(1<<st[j])]+kk[st[1]+1][st[j]+1]);
}
ans=f[(1<<n)-1];
}
write(ans);
return 0;
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0