結果
問題 | No.37 遊園地のアトラクション |
ユーザー |
![]() |
提出日時 | 2025-03-20 20:32:27 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 55 ms / 5,000 ms |
コード長 | 1,185 bytes |
コンパイル時間 | 171 ms |
コンパイル使用メモリ | 82,172 KB |
実行使用メモリ | 65,148 KB |
最終ジャッジ日時 | 2025-03-20 20:33:06 |
合計ジャッジ時間 | 2,603 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 27 |
ソースコード
def main(): import sys input = sys.stdin.read().split() idx = 0 T = int(input[idx]); idx +=1 N = int(input[idx]); idx +=1 c = list(map(int, input[idx:idx+N])) idx +=N v = list(map(int, input[idx:idx+N])) idx +=N groups = [] for i in range(N): ci = c[i] vi = v[i] options = [] current_v = vi sum_val = 0 k = 0 while True: k +=1 time = ci * k if time > T: break sum_val += current_v options.append((time, sum_val)) if current_v ==0: break current_v = current_v //2 if sum_val == sum_val - current_v: # no change in next step, break break groups.append(options) dp = [-float('inf')] * (T +1) dp[0] = 0 for group in groups: temp_dp = dp.copy() for time, val in group: for t in range(T, time-1, -1): if dp[t - time] + val > temp_dp[t]: temp_dp[t] = dp[t - time] + val dp = temp_dp print(max(dp)) if __name__ == '__main__': main()