結果
問題 |
No.698 ペアでチームを作ろう
|
ユーザー |
|
提出日時 | 2025-09-23 21:47:47 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 16 ms / 1,000 ms |
コード長 | 2,639 bytes |
コンパイル時間 | 2,107 ms |
コンパイル使用メモリ | 203,684 KB |
実行使用メモリ | 15,616 KB |
最終ジャッジ日時 | 2025-09-23 21:47:51 |
合計ジャッジ時間 | 3,407 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 12 |
ソースコード
#ifndef ONLINE_JUDGE #define _GLIBCXX_DEBUG #endif #include <bits/stdc++.h> using namespace std; // #include <atcoder/all> // using namespace atcoder; using ll = long long; // 2^63-1まで 負の値は可 using ull = unsigned long long; // 0<= ull <=2^64-1の範囲 負の値は不可 using lll = __int128_t; // 1e38まで 計算に使う場合はなるべく型を合わせる using vl = vector<ll>; using vs = vector<string>; using vvl = vector<vl>; using P = pair<ll, ll>; using G = vector<vl>; template <typename T> using MNPQ = priority_queue<T, vector<T>, greater<T>>; template <typename T> using MXPQ = priority_queue<T, vector<T>, less<T>>; #define rep(i, n) for (ll i = 0; i < n; i++) #define srep(i, s, n) for (int i = s; i < n; i++) #define rrep(i, s, n) for (ll i = s; i > n; i--) #define nall(a) a.begin(), a.end() #define rall(a) a.rbegin(), a.rend() #define chmax(x, y) x = max(x, y) #define chmin(x, y) x = min(x, y) #define lwb(a, x) (ll)(lower_bound(nall(a), x) - a.begin()) #define upb(a, x) (ll)(upper_bound(nall(a), x) - a.begin()) #define vunique(v) v.erase(unique(nall(v)), v.end()) #define pb push_back #define YN(flg) cout << (flg ? "Yes" : "No") << endl #define debug(x) cerr << #x << " = " << x << endl; const ll INF = 2e18; template <typename T> void vprint(vector<T>& a) { for (auto& x : a) cout << x << ' '; cout << endl; } template <typename T> void vvprint(vector<vector<T>>& a) { for (auto& row : a) vprint(row); } template <typename K, typename V> void mapprint(map<K, V>& a) { for (auto ite = a.begin(); ite != a.end(); ite++) { cout << "{key:" << ite->first << ", item:" << a[ite->first] << "} "; } cout << endl; } bool out_grid(ll x, ll y, ll h, ll w) { return !(0 <= x && x < h && 0 <= y && y < w); } // デバッグ用 void print128(lll x) { string res = ""; while (x > 0) { res += '0' + x % 10; x /= 10; } reverse(nall(res)); cout << res << endl; } int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); ll n; cin >> n; vl a(n); rep(i, n) cin >> a[i]; vector<ll> arr(1 << n); vector<ll> b; rep(i, n) srep(j, i + 1, n) { arr[(1 << i) + (1 << j)] = a[i] ^ a[j]; b.push_back((1 << i) + (1 << j)); } vector<vector<ll>> dp(b.size() + 1, vector<ll>(1 << n)); rep(i, b.size()) { rep(j, 1 << n) { dp[i + 1][j] = dp[i][j]; if ((j & b[i]) == b[i]) chmax(dp[i + 1][j], dp[i][j & ~b[i]] + arr[b[i]]); } } cout << dp.back().back() << endl; return 0; }