結果
問題 | No.3014 岩井満足性問題 |
ユーザー |
|
提出日時 | 2025-02-04 10:37:30 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 502 ms / 3,000 ms |
コード長 | 1,489 bytes |
コンパイル時間 | 728 ms |
コンパイル使用メモリ | 82,348 KB |
実行使用メモリ | 78,080 KB |
最終ジャッジ日時 | 2025-02-04 10:37:39 |
合計ジャッジ時間 | 5,718 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 18 |
ソースコード
def main():import sys# 入力は sys.stdin.buffer.read() で一括読み込み(高速)data = sys.stdin.buffer.read().split()if not data:returnit = iter(data)try:N = int(next(it))D = int(next(it))K = int(next(it))except StopIteration:returnA = [0] * Nfor i in range(N):A[i] = int(next(it))C = [0] * Nfor i in range(N):C[i] = int(next(it))INF = -10 ** 18 # 達成不可能な値(満足度の下限より十分小さい)# dp[d][b] = 採用済み問題が d 個,合計美しさが b (b>=K は b=K とする) のときの最大満足度dp = [[INF] * (K + 1) for _ in range(D + 1)]dp[0][0] = 0# 各問題について更新(0/1ナップザック方式)for i in range(N):a = A[i]c = C[i]# 採用済み問題数 d を D-1 から 0 まで逆順に更新for d in range(D - 1, -1, -1):cur = dp[d]nxt = dp[d + 1]for b in range(K + 1):val = cur[b]if val == INF:continuenb = b + cif nb >= K:nb = Kcand = val + aif cand > nxt[nb]:nxt[nb] = candans = dp[D][K]if ans == INF:sys.stdout.write("No")else:sys.stdout.write(str(ans))if __name__ == '__main__':main()