結果
問題 |
No.1174 盆栽の剪定
|
ユーザー |
👑 ![]() |
提出日時 | 2020-08-15 20:56:23 |
言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
結果 |
RE
|
実行時間 | - |
コード長 | 581 bytes |
コンパイル時間 | 91 ms |
コンパイル使用メモリ | 12,800 KB |
実行使用メモリ | 45,732 KB |
最終ジャッジ日時 | 2024-10-11 00:10:50 |
合計ジャッジ時間 | 3,856 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 9 RE * 22 |
ソースコード
n = int(input()) assert 1 <= n <= 10**5 a = [0, *map(int, input().split())] for i in a: assert 0 <= i <= 10**9 dp = [[0] * (n + 1) for i in range(37)] for i in range(n, 0, -1): lg = i.bit_length() - 1 for j in range(-lg, lg + 1, 2): cnt1 = 0 cnt2 = 0 if i * 2 <= n: cnt1 += max(0, dp[i * 2][j + 1]) cnt2 += max(0, dp[i * 2][j - 1]) if i * 2 + 1 <= n: cnt1 += max(0, dp[i * 2 + 1][j - 1]) cnt2 += max(0, dp[i * 2 + 1][j + 1]) dp[i][j] = a[i] * j + max(cnt1, cnt2) print(dp[1][0])