###書いたコード
01ナップザック問題の1解法です。AtCoderのABC032Dを解いているときに遭遇した謎です。
python
1import numpy as np 2N,W = map(int,input().split()) 3v_list = [] 4w_list = [] 5for n in range(N): 6 v,w = map(int,input().split()) 7 v_list.append(v) 8 w_list.append(w) 9 10#dp = [[0]*(W+1)]*(N+1) 11dp = np.zeros((N+1,W+1)) 12 13for i in range(N-1,-1,-1): 14 for j in range(W+1): 15 if w_list[i] > j: 16 dp[i][j] = dp[i+1][j] 17 else: 18 dp[i][j] = max(dp[i+1][j],dp[i+1][j-w_list[i]]+v_list[i]) 19print(int(dp[0][W]))
python
1import numpy as np 2N,W = map(int,input().split()) 3v_list = [] 4w_list = [] 5for n in range(N): 6 v,w = map(int,input().split()) 7 v_list.append(v) 8 w_list.append(w) 9 10dp = [[0]*(W+1)]*(N+1) 11#dp = np.zeros((N+1,W+1)) 12 13for i in range(N-1,-1,-1): 14 for j in range(W+1): 15 if w_list[i] > j: 16 dp[i][j] = dp[i+1][j] 17 else: 18 dp[i][j] = max(dp[i+1][j],dp[i+1][j-w_list[i]]+v_list[i]) 19print(int(dp[0][W]))
標準入力は以下
10 2921 981421680 325 515936168 845 17309336 371 788067075 112 104855562 96 494541604 960 32007355 161 772339969 581 55112800 248 98577050 22
変えたのは中盤のリストdp
の定義だけです。同じリストを作ったつもりだったのですが、上と下で出力が変化します。原因はなんでしょうか?ちなみに正しい出力は3657162058
です。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。