結果

問題 No.519 アイドルユニット
ユーザー vjudge1
提出日時 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
権限があれば一括ダウンロードができます

ソースコード

diff #

#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;
}

0