結果

問題 No.2982 Logic Battle
ユーザー tnakao0123tnakao0123
提出日時 2024-12-09 14:25:15
言語 C++17
(gcc 12.3.0 + boost 1.83.0)
結果
WA  
実行時間 -
コード長 1,046 bytes
コンパイル時間 394 ms
コンパイル使用メモリ 45,952 KB
実行使用メモリ 6,824 KB
最終ジャッジ日時 2024-12-09 14:25:18
合計ジャッジ時間 2,113 ms
ジャッジサーバーID
(参考情報)
judge4 / judge3
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 2 ms
5,248 KB
testcase_01 AC 2 ms
5,248 KB
testcase_02 AC 2 ms
5,248 KB
testcase_03 AC 2 ms
5,248 KB
testcase_04 AC 1 ms
5,248 KB
testcase_05 AC 1 ms
5,248 KB
testcase_06 AC 2 ms
5,248 KB
testcase_07 AC 2 ms
5,248 KB
testcase_08 AC 2 ms
5,248 KB
testcase_09 AC 2 ms
5,248 KB
testcase_10 WA -
testcase_11 WA -
testcase_12 WA -
testcase_13 WA -
testcase_14 WA -
testcase_15 WA -
testcase_16 WA -
testcase_17 WA -
testcase_18 WA -
testcase_19 WA -
testcase_20 WA -
testcase_21 WA -
testcase_22 WA -
testcase_23 WA -
testcase_24 WA -
testcase_25 WA -
testcase_26 WA -
testcase_27 WA -
testcase_28 WA -
testcase_29 WA -
testcase_30 AC 3 ms
5,248 KB
testcase_31 AC 2 ms
5,248 KB
testcase_32 AC 3 ms
5,248 KB
testcase_33 WA -
testcase_34 WA -
testcase_35 WA -
testcase_36 WA -
testcase_37 WA -
権限があれば一括ダウンロードができます

ソースコード

diff #

/* -*- coding: utf-8 -*-
 *
 * 2982.cc:  No.2982 Logic Battle - yukicoder
 */

#include<cstdio>
#include<algorithm>
#include<utility>

using namespace std;

/* constant */

const int MAX_N = 5000;

/* typedef */

using ll = long long;
using pll = pair<ll,ll>;

/* global variables */

int as[MAX_N][3];
pll dp[MAX_N + 1][3];

/* subroutines */

template <typename T>
inline void setmax(T &a, T b) { if (a < b) a = b; }

/* main */

int main() {
  int n;
  scanf("%d", &n);
  for (int i = 0; i < n; i++)
    for (int j = 0; j < 3; j++) scanf("%d", as[i] + j);

  for (int i = 0; i < n; i++)
    for (int j = 0; j < 3; j++) {
      int j1 = (j + 1) % 3, j2 = (j + 2) % 3;
      auto [s1, x1] = dp[i][j1];
      auto [s2, x2] = dp[i][j2];
      ll d1 = s1 + x1 + as[i][j], d2 = s2 + x2 + as[i][j];
      if (d1 >= d2) dp[i + 1][j] = {d1, max(0LL, x1 + as[i][j] - 1)};
      else dp[i + 1][j] = {d2, max(0LL, x2 + as[i][j] - 1)};
    }

  ll maxd = max(dp[n][0].first, max(dp[n][1].first, dp[n][2].first));
  printf("%lld\n", maxd);
  
  return 0;
}
0