結果
| 問題 |
No.1174 盆栽の剪定
|
| ユーザー |
👑 tatyam
|
| 提出日時 | 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])
tatyam