結果
| 問題 | No.698 ペアでチームを作ろう |
| ユーザー |
seaesae
|
| 提出日時 | 2018-11-20 00:30:05 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 7 ms / 1,000 ms |
| コード長 | 1,121 bytes |
| コンパイル時間 | 596 ms |
| コンパイル使用メモリ | 54,800 KB |
| 実行使用メモリ | 6,820 KB |
| 最終ジャッジ日時 | 2024-12-24 15:21:02 |
| 合計ジャッジ時間 | 1,355 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 12 |
ソースコード
//yukicoderNo.698「ペアでチームを作ろう」
#include<iostream>
using namespace std;
const int INF=100000000;
//排他的論理和の最大か
//dp[msk]:部分集合mskの人がペアになっている場合のスコアの最大値
int N;
int A[14];
int dp[(1<<14)+1];
int main(){
cin>>N;
for(int i=0; i<N; i++)cin>>A[i];
//探索
for(int msk=0; msk<(1<<N); msk++){//要素数Nの部分集合を全列挙
for(int a=0; a<N; a++){
for(int b=a+1; b<N; b++){
//要素a,bがそちらも部分集合mskに含まれていないとき
if(! (msk & (1<< a))){
if(! (msk & (1<< b))){
//部分集合に要素a,bを足したものとmaxを取る
//配るdp
if(dp[msk + (1 << a) + (1 << b)] < dp[msk] + (A[a] ^ A[b])){
dp[msk + (1 << a) + (1 << b)] = dp[msk] + (A[a] ^ A[b]);
}
}
}
}
}
}
cout<<dp[(1<<N) - 1]<<endl;
return 0;
}
seaesae