結果

問題 No.2982 Logic Battle
ユーザー InTheBloom
提出日時 2024-11-24 00:18:19
言語 D
(dmd 2.109.1)
結果
AC  
実行時間 256 ms / 2,000 ms
コード長 2,641 bytes
コンパイル時間 5,736 ms
コンパイル使用メモリ 174,464 KB
実行使用メモリ 5,248 KB
最終ジャッジ日時 2024-12-06 23:30:29
合計ジャッジ時間 7,234 ms
ジャッジサーバーID
(参考情報)
judge3 / judge4
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 38
権限があれば一括ダウンロードができます

ソースコード

diff #
プレゼンテーションモードにする

import std;
void main () {
int N = readln.chomp.to!int;
auto A = new int[][](N, 0);
foreach (i; 0..N) A[i] = readln.split.to!(int[]);
//
// P = p1 + p2 + p3 + ...
        
// 0000
// 0 0 0O(N)
auto dp = new long[][](N + 1, 3);
auto ndp = new long[][](N + 1, 3);
// dp[i][j][k] := ikj
// N(0)
foreach (j; 0..N + 1) {
foreach (k; 0..3) {
dp[j][k] = -long.max;
}
}
dp[0][] = 0;
foreach (i; 0..N) {
foreach (j; 0..N + 1) {
foreach (k; 0..3) {
ndp[j][k] = -long.max;
}
}
foreach (j; 0..N + 1) {
foreach (k; 0..3) {
if (dp[j][k] == -long.max) continue;
foreach (l; 0..3) {
if (k == l) continue;
if (A[i][l] == 0) {
//
int v = 0;
if (0 < j) v = -1;
ndp[max(j - 1, 0)][l] = max(
ndp[max(j - 1, 0)][l],
dp[j][k] + (N - i - 1) * v,
);
}
if (1 <= A[i][l]) {
ndp[min(N, j - 1 + A[i][l])][l] = max(
ndp[min(N, j - 1 + A[i][l])][l],
dp[j][k] + 1L * (N - i) * (A[i][l] - 1) + 1,
);
}
}
}
}
swap(dp, ndp);
}
long ans = 0;
foreach (j; 0..N + 1) {
foreach (k; 0..3) {
ans = max(ans, dp[j][k]);
}
}
writeln(ans);
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0