結果
問題 |
No.1522 Unfairness
|
ユーザー |
![]() |
提出日時 | 2025-06-12 21:25:47 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 1,327 bytes |
コンパイル時間 | 279 ms |
コンパイル使用メモリ | 82,176 KB |
実行使用メモリ | 92,416 KB |
最終ジャッジ日時 | 2025-06-12 21:26:44 |
合計ジャッジ時間 | 3,966 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | TLE * 1 -- * 26 |
ソースコード
def main(): import sys input = sys.stdin.read().split() idx = 0 N = int(input[idx]) idx += 1 M = int(input[idx]) idx += 1 A = list(map(int, input[idx:idx+N])) A.sort(reverse=True) max_k = N // 2 INF = -float('inf') # Initialize DP dp = [ [INF]*(M+1) for _ in range(max_k+1) ] dp[0][0] = 0 for i in range(0, N-1): for j in range(max_k, -1, -1): for d in range(M, -1, -1): if dp[j][d] == INF: continue if j >= max_k: continue new_j = j + 1 dx = A[i] - A[i+1] new_d = d + dx if new_d > M: continue new_sum = dp[j][d] + A[i] + A[i+1] if new_sum > dp[new_j][new_d]: dp[new_j][new_d] = new_sum # Merge i and i+1 as processed # No need to do anything else, since i increases by 1 max_O = 0 for j in range(0, max_k+1): for d in range(0, M+1): if dp[j][d] == INF: continue sum_selected = dp[j][d] sum_x = (sum_selected + d) // 2 if sum_x > max_O: max_O = sum_x print(max_O) if __name__ == '__main__': main()