結果
問題 |
No.798 コレクション
|
ユーザー |
👑 ![]() |
提出日時 | 2025-07-16 01:49:35 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 130 ms / 2,000 ms |
コード長 | 723 bytes |
コンパイル時間 | 490 ms |
コンパイル使用メモリ | 82,708 KB |
実行使用メモリ | 77,300 KB |
最終ジャッジ日時 | 2025-07-16 01:49:39 |
合計ジャッジ時間 | 3,722 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 23 |
ソースコード
""" https://yukicoder.me/problems/no/798 N//3個 freeにできる 買う商品を決め撃つと、Bが大きい順に取るのが最適 B降順そーとして dp[i][K] = i番目まで決めて、K個フリーにした場合の最小 """ N = int(input()) BA = [] for i in range(N): A,B = map(int,input().split()) BA.append( (B,A) ) BA.sort() BA.reverse() F = N//3 INF = float("inf") dp = [INF] * (F+1) dp[0] = 0 for i in range(N): b,a = BA[i] ndp = [INF] * (F+1) for k in range(F+1): # freeにしない ndp[k] = min(ndp[k], dp[k] + a + b*(i-k) ) # freeにする if k != F: ndp[k+1] = min(ndp[k+1] , dp[k]) dp = ndp print (min(dp))