結果
問題 | 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)