結果
問題 | No.595 登山 |
ユーザー |
![]() |
提出日時 | 2024-12-19 03:11:03 |
言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,021 bytes |
コンパイル時間 | 366 ms |
コンパイル使用メモリ | 12,800 KB |
実行使用メモリ | 32,808 KB |
最終ジャッジ日時 | 2024-12-19 03:11:17 |
合計ジャッジ時間 | 13,600 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 5 WA * 20 |
ソースコード
import sysinput = sys.stdin.readlineN,P=map(int,input().split())A=list(map(int,input().split()))USE=[0]*Nfor i in range(1,N-1):if A[i-1]<=A[i]<=A[i+1]:USE[i]=1if A[i-1]>=A[i]>=A[i+1]:USE[i]=1B=[]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=0for 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]=0for 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)ANS=DP[-1]if len(B)>=2:ANS=min(ANS,DP[-2]+P)if len(B)>=2:if len(B)%2==0:ANS=min(ANS,DP[-2]+B[-1]-B[-2])else:ANS=min(ANS,DP[-2])print(ANS)