結果
| 問題 |
No.45 回転寿司
|
| ユーザー |
|
| 提出日時 | 2017-08-09 11:29:10 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
AC
|
| 実行時間 | 43 ms / 5,000 ms |
| コード長 | 1,109 bytes |
| コンパイル時間 | 538 ms |
| コンパイル使用メモリ | 12,416 KB |
| 実行使用メモリ | 10,752 KB |
| 最終ジャッジ日時 | 2024-12-27 16:51:49 |
| 合計ジャッジ時間 | 3,166 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 30 |
ソースコード
# -*- coding: utf-8 -*-
N = int(input())
V = list(map(int, input().split()))
dp = [] # dp[i][val]は,i番目以降の寿司を取って得られる最大の美味しさの和を記録
dp = [-1]*1001
def max_taste(i):
# メモが使える場合は使う
if dp[i] >= 0:
return dp[i]
c_max = -1
if i == (N-1): # 最後の寿司しか選べない場合は,その寿司を取る場合が最大(N=1の場合の対応)
c_max = V[i]
elif i == (N-2): # 1つ先が最後の寿司の場合,自身か次の最後の寿司を取る場合が最大(N=2の場合の対応)
c_max = max(V[i], V[i+1])
elif i+2 == (N-1): # 2つ先が最後の寿司の場合,(自身+2つ先)か(1つ先)のいずれか最大のパターンを選ぶ
c_max = max(V[i]+V[i+2], V[i+1])
else: # 自身を取った上で2つ先から選んでくるパターンと,自身をスルーして1つ先から選んでくるパターンが有る
c_max = max(max_taste(i+2)+V[i], max_taste(i+1))
dp[i] = c_max
return dp[i]
print(max_taste(0))