yukicoder No.698 ペアでチームを作ろう

yukicoder No.698 ペアでチームを作ろう

問題概要

リンク参照

考察

  • dp[i]:=状態iがペアを作っている時の最大値としてbitDPする

ソースコード

#include<iostream>
#include<vector>
#include<algorithm>
#include<cctype>
#include<utility>
#include<string>
#include<cmath>
#include<cstring>
#include<queue>
#include<map>
#include<set>
#include<climits>
#include<bitset>
#include<stack>

using namespace std;

/******************************************************************************************/

int dp[1 << 15];

int main() {

	cin.tie(nullptr);
	ios::sync_with_stdio(false);

	int N;
	cin >> N;
	vector<int> A(N);
	for (int i = 0; i < N; i++)
	{
		cin >> A[i];
	}


	for (int i = 0; i < (1 << N); i++)
	{
		for (int j = 0; j < N; j++)
		{
			if ((i >> j) & 1)continue;
			for (int k = 0; k < N; k++)
			{
				if ((i >> k) & 1)continue;
				dp[i | (1 << j) | (1 << k)] = max(dp[i | (1 << j) | (1 << k)], dp[i] + (A[j] ^ A[k]));

			}
		}
	}

	
	cout << dp[(1 << N) - 1] << endl;


}