結果
| 問題 |
No.844 split game
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2021-06-23 14:05:58 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 307 ms / 2,000 ms |
| コード長 | 1,144 bytes |
| コンパイル時間 | 157 ms |
| コンパイル使用メモリ | 82,240 KB |
| 実行使用メモリ | 109,904 KB |
| 最終ジャッジ日時 | 2024-06-24 10:50:11 |
| 合計ジャッジ時間 | 10,430 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 56 |
ソースコード
def main1(n,m,a,lrp):
g=[[] for _ in range(n+1)]
for l,r,p in lrp:
# 区間[l,r]を作る→次作れるのは[r+1,x]
g[l-1].append([r,p])
inf=float('inf')
seen=[-inf]*n*2
# seen[0*n+v]:現在vにいて、左に黒線ありのときの最大値
# seen[1*n+v]:現在vにいて、左に黒線なしのときの最大値
seen[0]=0
ans=0
for v in range(n):
if seen[v]!=-inf:
if v+1==n:
ans=max(ans,seen[v])
elif seen[n+v+1]<seen[v]:
seen[n+v+1]=seen[v]
for nv,np in g[v]:
if nv==n:
ans=max(ans,seen[v]+np)
else:
if seen[nv]<seen[v]+np-a:
seen[nv]=seen[v]+np-a
if seen[n+v]!=-inf:
if v+1==n:
ans=max(ans,seen[n+v])
elif seen[n+v+1]<seen[n+v]:
seen[n+v+1]=seen[n+v]
for nv,np in g[v]:
if nv==n:
ans=max(ans,seen[n+v]+np-a)
else:
if seen[nv]<seen[n+v]+np-a-a:
seen[nv]=seen[n+v]+np-a-a
return ans
if __name__=='__main__':
n,m,a=map(int,input().split())
lrp=[list(map(int,input().split())) for _ in range(m)]
ret1=main1(n,m,a,lrp)
print(ret1)