結果
問題 | No.2982 Logic Battle |
ユーザー |
|
提出日時 | 2024-12-07 16:18:59 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 997 ms / 2,000 ms |
コード長 | 2,096 bytes |
コンパイル時間 | 5,103 ms |
コンパイル使用メモリ | 251,356 KB |
実行使用メモリ | 5,248 KB |
最終ジャッジ日時 | 2024-12-07 16:19:26 |
合計ジャッジ時間 | 26,554 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 38 |
ソースコード
#include <bits/stdc++.h>using ll = long long;#define rep(i, n) for (int i = 0, i##_len = (n); i < i##_len; ++i)#define reps(i, n) for (int i = 1, i##_len = (n); i <= i##_len; ++i)#define rrep(i, n) for (int i = ((int)(n)-1); i >= 0; --i)#define rreps(i, n) for (int i = ((int)(n)); i > 0; --i)#define rep2(i, s, n) for (int i = (s); i < (int)(n); i++)#define repc2(i, s, n) for (int i = (s); i <= (int)(n); i++)constexpr int inf = 2000'000'000;constexpr ll M7 = 1000000007ll;constexpr ll M09 = 1000000009ll;constexpr ll M9 = 998244353ll;#define all(v) begin(v), end(v)#define rall(v) rbegin(v), rend(v)constexpr ll linf = 0x3f3f3f3f3f3f3f3f;using namespace std;using P = pair<ll, ll>;P dp[2][3][5001];int main() {ios_base::sync_with_stdio(false);cin.tie(NULL);int n;cin >> n;vector<vector<ll>> a(n, vector<ll>(3));rep(i, n) rep(j, 3) cin >> a[i][j];rep(i, 2) rep(j, 3) rep(k, n + 1) dp[i][j][k] = {-linf, -linf};dp[0][0][0] = dp[0][1][0] = dp[0][2][0] = {0, 0};auto fmax = [&](P a, P b, int i) {ll t = n - 1 - i;auto [da, xa] = a;auto [db, xb] = b;if (da == -linf) return b;if (db == -linf) return a;if (xa == xb) return da > db ? a : b;ll sa = da + t * xa - (1 + t) * t / 2;ll sb = db + t * xb - (1 + t) * t / 2;return sa > sb ? a : b;};rep(i, n) {rep(j, 3) {rep(k, n + 1) {auto [d, x] = dp[i % 2][j][k];rep(nj, 3) {if (j == nj) continue;ll aij = a[i][nj];ll nx = max<ll>(0ll, x + aij - 1);ll nk = min<ll>(n, nx);ll nd = d + (x + aij);dp[(i + 1) % 2][nj][nk] = fmax(dp[(i + 1) % 2][nj][nk], {nd, nx}, i);}}}rep(j, 3) rep(k, n + 1) dp[i % 2][j][k] = {-linf, -linf};}ll ans = -linf;rep(j, 3) {rep(k, n + 1) { ans = max(ans, dp[n % 2][j][k].first); }}cout << ans << endl;}