結果
問題 | No.2071 Shift and OR |
ユーザー | startcpp |
提出日時 | 2022-09-17 04:36:40 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 59 ms / 2,000 ms |
コード長 | 640 bytes |
コンパイル時間 | 924 ms |
コンパイル使用メモリ | 63,872 KB |
実行使用メモリ | 5,248 KB |
最終ジャッジ日時 | 2024-12-22 00:17:38 |
合計ジャッジ時間 | 2,523 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 37 |
ソースコード
//これ好き。N >= 16なら全部覆えるので65535、N < 16ならBitDPできる。 #include <iostream> #define rep(i, n) for(i = 0; i < n; i++) using namespace std; int n; int a[200000]; bool dp[16][1 << 16]; int main() { int i, j, k; cin >> n; rep(i, n) cin >> a[i]; if (n >= 16) { cout << (1 << 16) - 1 << endl; return 0; } dp[0][0] = true; rep(i, n) { rep(j, (1 << 16)) { if (dp[i][j] == false) continue; int val = a[i]; rep(k, 16) { dp[i + 1][j | val] = true; val = (val >> 1) + (1 << 15) * (val % 2); } } } for (i = 65535; i >= 0; i--) if (dp[n][i]) break; cout << i << endl; return 0; }