結果
| 問題 |
No.595 登山
|
| ユーザー |
titia
|
| 提出日時 | 2024-12-19 03:04:25 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 860 bytes |
| コンパイル時間 | 491 ms |
| コンパイル使用メモリ | 12,672 KB |
| 実行使用メモリ | 32,772 KB |
| 最終ジャッジ日時 | 2024-12-19 03:04:39 |
| 合計ジャッジ時間 | 12,745 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 4 WA * 21 |
ソースコード
import sys
input = sys.stdin.readline
N,P=map(int,input().split())
A=list(map(int,input().split()))
USE=[0]*N
for i in range(1,N-1):
if A[i-1]<=A[i]<=A[i+1]:
USE[i]=1
if A[i-1]>=A[i]>=A[i+1]:
USE[i]=1
B=[]
for i in range(N):
if USE[i]==0:
B.append(A[i])
if len(B)>=2 and B[0]>=B[1]:
B.pop(0)
ANS=0
for i in range(0,len(B),2):
if i+1<len(B):
ANS+=min(B[i+1]-B[i],P)
DP=[1<<63]*len(B)
DP[0]=0
for i in range(1,len(B)):
if i%2==0:
if i-1>=0:
DP[i]=min(DP[i],DP[i-1]+P)
if i-2>=0:
DP[i]=min(DP[i],DP[i-2]+B[i-1]-B[i-2])
DP[i]=min(DP[i],DP[i-2]+P)
else:
if i-1>=0:
DP[i]=min(DP[i],DP[i-1]+P)
if i-2>=0:
DP[i]=min(DP[i],DP[i-2]+B[i-2]-B[i-1])
DP[i]=min(DP[i],DP[i-2]+P)
print(DP[-1])
titia