問題
D – 高橋くんの苦悩
回答
動的計画法を使います。
Python では TLE ですが、PyPy では間に合いました。
W = int(input()) N, K = map(int, input().split()) AB = [list(map(int, input().split())) for _ in range(N)] dp = [[[0]*(W+1) for _ in range(K+1)] for _ in range(N+1)] for n in range(N): for k in range(K+1): for w in range(W+1): a = AB[n][0] # 幅 b = AB[n][1] # 重要度 if w-a>=0 and k-1>=0: dp[n+1][k][w] = max(dp[n][k][w], dp[n][k-1][w-a]+b) else: dp[n+1][k][w] = dp[n][k][w] print(dp[N][K][W])