Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- const int N = 10005;
- int n;
- int64_t a[5][N];
- int d[] = {0, 1, 2, 4, 5, 8, 9, 10};
- int64_t dp[N][20];
- int64_t res = -1e8;
- int get_bit(int x, int k) {
- return (x >> k) & 1;
- }
- int64_t get_sum(int i, int x) {
- return get_bit(x, 0)*a[0][i] + get_bit(x, 1)*a[1][i] + get_bit(x, 2)*a[2][i] + get_bit(x, 3)*a[3][i];
- }
- bool Check(int x, int y) {
- for(int i = 0; i < 4; ++i) {
- if(get_bit(x, i) == 1 && get_bit(y, i) == 1)
- return false;
- }
- return true;
- }
- void solve() {
- cin >> n;
- for(int i = 0; i < 4; ++i)
- for(int j = 1; j <= n; ++j) {
- cin >> a[i][j];
- res = max(res, a[i][j]);
- }
- if(res < 0) {
- cout << res << '\n';
- return;
- }
- for(int i = 1; i <= n; ++i) {
- for(int x = 0; x < 8; ++x) {
- int64_t sum = get_sum(i, d[x]);
- for(int y = 0; y < 8; ++y)
- if(Check(d[x], d[y]))
- dp[i][d[x]] = max(dp[i][d[x]], dp[i-1][d[y]] + sum);
- res = max(res, dp[n][d[x]]);
- }
- }
- cout << res << '\n';
- }
- int main() {
- //freopen("in.txt", "r", stdin);
- //freopen("QBSELECT 2.inp", "r", stdin);
- //freopen("QBSELECT 2.out", "w", stdout);
- ios_base::sync_with_stdio(false);
- cin.tie(NULL); cout.tie(NULL);
- solve();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement