ログインしてください。
提出 #24437899
ソースコード 拡げる
import sys def main(f): N = int(f.readline()) A = [None] + list(map(int, f.readline().split())) S = [0] * (N+1) for i in range(1, N+1): S[i] = S[i-1] + A[i] dp = [[None] * (N+1) for _ in range(N+1)] # dp[i][j] : a_i 〜 a_j を使った場合の答え # d = 1 for i in range(1, N+1): dp[i][i] = 0 for d in range(2, N+1): # 幅dの部分列について計算 for i in range(1, N+2-d): j = i + d - 1 min_cost = -1 for k in range(i, j): # 最後に結合する場所で場合分け cost = dp[i][k] + dp[k+1][j] + S[j] - S[i-1] # sum(A[i:j+1]) if min_cost < 0 or cost < min_cost: min_cost = cost dp[i][j] = min_cost print(dp[1][N]) main(sys.stdin)
提出情報
提出日時 | |
---|---|
問題 | N - Slimes |
ユーザ | enakai |
言語 | PyPy3 (7.3.0) |
得点 | 100 |
コード長 | 752 Byte |
結果 | AC |
実行時間 | 335 ms |
メモリ | 76224 KiB |
ジャッジ結果
セット名 | All | ||
---|---|---|---|
得点 / 配点 | 100 / 100 | ||
結果 |
|
セット名 | テストケース |
---|---|
All | 0_00, 0_01, 0_02, 0_03, 1_00, 1_01, 1_02, 1_03, 1_04, 1_05, 1_06, 1_07, 1_08, 1_09, 1_10, 1_11 |
ケース名 | 結果 | 実行時間 | メモリ |
---|---|---|---|
0_00 | AC | 66 ms | 62068 KiB |
0_01 | AC | 52 ms | 62016 KiB |
0_02 | AC | 48 ms | 62052 KiB |
0_03 | AC | 49 ms | 62016 KiB |
1_00 | AC | 49 ms | 61680 KiB |
1_01 | AC | 282 ms | 76160 KiB |
1_02 | AC | 272 ms | 76224 KiB |
1_03 | AC | 227 ms | 75792 KiB |
1_04 | AC | 312 ms | 76008 KiB |
1_05 | AC | 298 ms | 76120 KiB |
1_06 | AC | 308 ms | 75916 KiB |
1_07 | AC | 306 ms | 75968 KiB |
1_08 | AC | 304 ms | 75936 KiB |
1_09 | AC | 335 ms | 76168 KiB |
1_10 | AC | 333 ms | 75764 KiB |
1_11 | AC | 288 ms | 76156 KiB |