結果
問題 |
No.1522 Unfairness
|
ユーザー |
![]() |
提出日時 | 2025-06-12 13:49:40 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 867 bytes |
コンパイル時間 | 192 ms |
コンパイル使用メモリ | 82,432 KB |
実行使用メモリ | 52,480 KB |
最終ジャッジ日時 | 2025-06-12 13:49:54 |
合計ジャッジ時間 | 4,358 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | TLE * 1 -- * 26 |
ソースコード
n, M = map(int, input().split()) A = list(map(int, input().split())) A.sort(reverse=True) # Generate pairs of adjacent elements and their values pairs = [] for i in range(len(A) - 1): pairs.append((A[i] - A[i+1], A[i])) max_k = len(pairs) max_possible_k = min(max_k, n // 2) # Initialize DP table dp = [[-1] * (M + 1) for _ in range(max_possible_k + 1)] dp[0][0] = 0 for (d, v) in pairs: # Update DP in reverse to avoid overwriting current state for j in range(max_possible_k, 0, -1): for m in range(M, d - 1, -1): if dp[j-1][m - d] != -1: if dp[j][m] < dp[j-1][m - d] + v: dp[j][m] = dp[j-1][m - d] + v # Find the maximum possible O max_O = 0 for k in range(0, max_possible_k + 1): for m in range(0, M + 1): if dp[k][m] != -1: max_O = max(max_O, dp[k][m]) print(max_O)