結果
問題 |
No.951 【本日限定】1枚頼むともう1枚無料!
|
ユーザー |
![]() |
提出日時 | 2025-06-12 14:34:45 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 1,663 bytes |
コンパイル時間 | 140 ms |
コンパイル使用メモリ | 81,916 KB |
実行使用メモリ | 263,328 KB |
最終ジャッジ日時 | 2025-06-12 14:36:05 |
合計ジャッジ時間 | 12,696 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 33 TLE * 19 |
ソースコード
def main(): import sys input = sys.stdin.read().split() idx = 0 N = int(input[idx]) idx += 1 K = int(input[idx]) idx += 1 pizzas = [] for _ in range(N): p = int(input[idx]) idx += 1 d = int(input[idx]) idx += 1 pizzas.append((p, d)) # 按价格从高到低排序 pizzas.sort(reverse=True, key=lambda x: x[0]) # 初始化dp数组 INF = float('-inf') dp = [ [INF] * 2 for _ in range(K+1) ] dp[0][0] = 0 # 初始状态:支付0元,无免费机会,美味度为0 for p, d in pizzas: # 创建临时dp数组,用于保存当前的状态 temp_dp = [row[:] for row in dp] for c in range(K+1): for b in [0, 1]: if temp_dp[c][b] == INF: continue # 选项二:购买当前披萨 if b == 0: new_c = c + p if new_c <= K: new_b = 1 new_d = temp_dp[c][b] + d if new_d > dp[new_c][new_b]: dp[new_c][new_b] = new_d # 选项三:免费拿当前披萨 if b == 1: new_c = c new_b = 0 new_d = temp_dp[c][b] + d if new_d > dp[new_c][new_b]: dp[new_c][new_b] = new_d # 找出最大值 max_d = 0 for c in range(K+1): for b in [0, 1]: if dp[c][b] > max_d: max_d = dp[c][b] print(max_d) if __name__ == "__main__": main()