import java.util.Scanner; publicclassMain { publicstaticvoidmain(String[] args) { Scannercin=newScanner(System.in); intN= cin.nextInt(); intV= cin.nextInt(); int[] v = newint[N + 1]; int[] w = newint[N + 1]; for (inti=1; i < N + 1; i++) { v[i] = cin.nextInt(); w[i] = cin.nextInt(); } int[][] cell = newint[N + 1][V + 1]; for (inti=1; i < N + 1; i++) { for (intj=1; j < V + 1; j++) { if (j >= v[i]) { cell[i][j] = Math.max(cell[i - 1][j - v[i]] + w[i], cell[i - 1][j]); } else { cell[i][j] = cell[i - 1][j]; } } } System.out.println(cell[N][V]); } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
N,V=list(map(int,input().split())) things=[[0]*2for i inrange(N+1)] for i inrange(1,N+1): things[i][0],things[i][1]=list(map(int,input().split())) cell=[[0]*(V+1) for i inrange(N+1)] for i inrange(1,N+1): for j inrange(1,V+1): #j空间大的背包,j大于物品体积的时候才有剩余空间价值 if(j>=things[i][0]): if(cell[i-1][j]>things[i][1]+cell[i-1][j-things[i][0]]): cell[i][j]=cell[i-1][j] else: cell[i][j]=things[i][1]+cell[i-1][j-things[i][0]] else: cell[i][j]=cell[i-1][j] print(cell[N][V])
python定义二维数组
使用numpy
1 2 3 4 5 6 7 8 9
import numpy as np arr=[[0]*3for i inrange(3)] arr1=np.zeros([3,3]) print(arr1) ''' [[0. 0. 0.] [0. 0. 0.] [0. 0. 0.]] '''
N,V=list(map(int,input().split())) v=[0]*(N+1) w=[0]*(N+1) for i inrange(1,N+1): v[i],w[i]=list(map(int,input().split())) cell=[[0]*(V+1) for i inrange(N+1)] deffindMax(i,j): max=cell[i-1][j] for k inrange(int(j/v[i]+1)): if(cell[i-1][j-k*v[i]]+k*w[i]>max): max=cell[i-1][j-k*v[i]]+k*w[i] returnmax for i inrange(1,N+1): for j inrange(1,V+1): cell[i][j]=findMax(i,j) print(cell[N][V])
优化
1 2 3 4 5 6 7 8 9 10
for i inrange(1,N+1): for j inrange(1,V+1): if(j>=v[i]): if(cell[i][j-v[i]]+w[i]>cell[i-1][j]): cell[i][j]=cell[i][j-v[i]]+w[i] else: cell[i][j]=cell[i-1][j] else: cell[i][j]=cell[i-1][j] print(cell[N][V])