1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
|
#include <bits/stdc++.h>
#define log printf #define EPS 1e-8 #define INF 0x3f3f3f3f #define FOR(i, l, r) for (int(i) = (l); (i) <= (r); ++(i)) #define IOS \ ios::sync_with_stdio(false); \ cin.tie(nullptr); \ cout.tie(nullptr);
using namespace std;
typedef __int128 i128; typedef long long ll; typedef pair<int, int> PII;
const int N = 1010; int n, a[N], b[N], c[N], dp[3][N], ans = -INF;
template <typename T>
inline T read() { T sum = 0, fl = 1; char ch = getchar(); for (; !isdigit(ch); ch = getchar()) if (ch == '-') fl = -1; for (; isdigit(ch); ch = getchar()) sum = sum * 10 + ch - '0'; return sum * fl; }
template <typename T>
inline void write(T x) { if (x < 0) putchar('-'), write<T>(-x); static T sta[35]; int top = 0; do { sta[top++] = x % 10, x /= 10; } while (x); while (top) putchar(sta[--top] + 48); }
int pk(int x, int y) { if (x == y) return 1; if (x == y + 1 || x == y - 2) return 2; return 0; }
int main() { n = read<int>(); FOR(i, 1, n) a[i] = read<int>(); FOR(i, 1, n - 1) b[i] = read<int>(); FOR(i, 1, n) c[i] = read<int>(); memset(dp, -0x3f, sizeof(dp)); FOR(i, 0, 2) dp[i][0] = pk(i, c[1]) * a[1]; FOR(i, 2, n) for (int j = i - 1; j >= 0; --j) FOR(k, 0, 2) { int s = pk(k, c[i]) * a[i]; dp[k][j] += s; if (j > 0) FOR(l, 0, 2) dp[k][j] = max(dp[k][j], dp[l][j - 1] + s - b[j]); } FOR(i, 0, n - 1) FOR(j, 0, 2) ans = max(ans, dp[j][i]); log("%d", ans); return 0; }
|