1 条题解
-
0
#include <iostream> #include <cstdio> #include <vector> #include <cmath> #include <algorithm> #include <cstring> #define int long long #define rep(i, l, r) for (int i = (l); i <= (r); i ++ ) #define per(i, r, l) for (int i = (r); i >= (l); i -- ) using namespace std; const int N = 1e5 + 5, M = (1 << 8); const long long INF = 1e18; long long value[M][M]; int n, a[N]; void fill_value() { for (int x = 0; x < M; x ++ ) for (int y = 0; y < M; y ++ ) value[x][y] = -INF; } signed main() { ios::sync_with_stdio(0), cin.tie(0), cout.tie(0); cin >> n; int t = 0; rep(i, 1, n) cin >> a[i]; reverse(a + 1, a + 1 + n); fill_value(); long long ans = 0; rep(i, 1, n) { int x = (a[i] >> 8), y = (a[i] & (M - 1)); long long v = 0; for (int z = 0; z < M; z ++ ) v = max(v, value[x][z] + (y & z)); for (int z = 0; z < M; z ++ ) value[z][y] = max(value[z][y], v + ((x & z) << 8)); ans = max(ans, a[i] + v); } cout << ans << ' '; fill_value(); ans = 0; rep(i, 1, n) { int x = (a[i] >> 8), y = (a[i] & (M - 1)); long long v = 0, lst; for (int z = 0; z < M; z ++ ) v = max(v, value[x][z] + (y | z)); for (int z = 0; z < M; z ++ ) value[z][y] = max(value[z][y], v + ((x | z) << 8)); ans = max(ans, a[i] + v); } cout << ans << ' '; fill_value(); ans = 0; rep(i, 1, n) { int x = (a[i] >> 8), y = (a[i] & (M - 1)); long long v = 0, lst; for (int z = 0; z < M; z ++ ) v = max(v, value[x][z] + (y ^ z)); for (int z = 0; z < M; z ++ ) value[z][y] = max(value[z][y], v + ((x ^ z) << 8)); ans = max(ans, a[i] + v); } cout << ans << ' '; return 0; }
- 1
信息
- ID
- 281
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 9
- 标签
- 递交数
- 27
- 已通过
- 2
- 上传者