動的計画法(1)
最近、AtCoder 版!蟻本 (初級編)をやってる。
めっちゃ多い。
多重な動的計画法の実装がうまくいったから、見せびらかそうと思って、記事を書いてる。
本当は解説しようと思ったけど、めんどくさくなった。
問題はABC015のD問題D - 高橋くんの苦悩です。
解説はAtCoder Beginner Contest 015 解説です。
pythonは通らなくて、pypyで通した。
W = int(input()) N, K = map( int, input().split()) dp = [[0 for _ in range(W+1)] for _ in range(K+1) ] for k in range(N): a, b = map( int, input().split()) for i in range(K,0,-1): for j in range(W,0,-1): if a <= j: dp[i][j] = max( dp[i][j], dp[i-1][j-a] + b) print(dp[K][W])
dp[i][j]で枚数i枚以下で、幅j以下での重要度の最大値を表している。
for文を逆に回すのがポイント。