結果
| 問題 |
No.1174 盆栽の剪定
|
| ユーザー |
👑 tatyam
|
| 提出日時 | 2020-08-18 00:19:45 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
TLE
(最新)
AC
(最初)
|
| 実行時間 | - |
| コード長 | 581 bytes |
| コンパイル時間 | 117 ms |
| コンパイル使用メモリ | 12,800 KB |
| 実行使用メモリ | 105,700 KB |
| 最終ジャッジ日時 | 2024-10-11 11:32:49 |
| 合計ジャッジ時間 | 4,706 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 16 TLE * 1 -- * 14 |
ソースコード
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[j + 1][i * 2])
cnt2 += max(0, dp[j - 1][i * 2])
if i * 2 + 1 <= n:
cnt1 += max(0, dp[j - 1][i * 2 + 1])
cnt2 += max(0, dp[j + 1][i * 2 + 1])
dp[j][i] = a[i] * j + max(cnt1, cnt2)
print(dp[0][1])
tatyam