#============================================================================== # def mybag(n,c,z,v): # w = [[0 for i in range(c+1)] for j in range(n+1)] # for i in range(n-1,-1,-1): # for j in range(1,c+1): # if j >= z[i] and w[i+1][j] < w[i+1][j-z[i]] + v[i]: # w[i][j] = w[i+1][j-z[i]] + v[i]; # print w # else: # w[i][j] = w[i+1][j] # # return w # # def asswer(m,n,c,w): # x1 = [] # j = c # for i in range(n): # if m[i][j] == m[i+1][j]: # x1.append(0) # else: # x1.append(1) # j = j - w[i] # return x1 # # # # # # n = 5; # c = 10 # w = [2,2,6,5,4] #============================================================================== #v = [6,3,5,4,6] #res = mybag(n,c,w,v) #x = asswer(res,n,c,w) #sum_time,num_medic = raw_input().split(' ') #sum_time = int(sum_time) #num_medic = int(num_medic) #time_list = [] #values_list =[] #for i in range(num_medic): # time,value = raw_input().split(' ') # time_list.append(int(time)) # values_list.append(int(value)) ##============================================================================== #def bag_medic(sum_time,num_medic,time_list,values_list): # w = [[0 for j in range(sum_time+1)] for i in range(num_medic+1)] # for i in range(num_medic-1,-1,-1): # for j in range(1,sum_time + 1): # if j >= time_list[i] and w[i + 1][j] < w[i + 1][j-time_list[i]] + values_list[i]: # w[i][j] = w[i + 1][j-time_list[i]] + values_list[i] # else: # w[i][j] = w[i+1][j] # # return w # #def find_answer(res,sum_time,num_medic,time_list): # j = sum_time # x1 = [] # for i in range(num_medic): # if res[i][j] == res[i+1][j]: # x1.append(0) # else: # x1.append(1) # j = j - time_list[i] # return x1 #def maxValue(x1,values_list): # max_value = 0 # for i in range(len(x1)): # max_value += x1[i] * values_list[i] # print max_value ##============================================================================== # #res = bag_medic(sum_time,num_medic,time_list,values_list) #x1 = find_answer(res,sum_time,num_medic,time_list) #maxValue(x1,values_list) def bag2(goods_num,bag_weight,values,goods_weight): f = [[0 for j in range(bag_weight + 1)] for i in range(goods_num + 1)] flag = [[0 for j in range(bag_weight + 1)] for i in range(goods_num + 1)]; for i in range(1,bag_weight + 1): f[1][i] = int(i/goods_weight[0]) * values[0] if i < goods_weight[0]: flag[1][i] = 0 else: flag[1][i] = 1 for k in range(2,goods_num + 1): for y in range(1,bag_weight + 1): if y >= goods_weight[k-1] and f[k-1][y] <= f[k][y - goods_weight[k-1]] + values[k-1]: f[k][y] = f[k][y - goods_weight[k-1]] + values[k-1] flag[k][y] = k else: f[k][y] = f[k-1][y] flag[k][y] = flag[k-1][y] return f,flag def find_answer(flag,goods_num,bag_weight,goods_weight): j = bag_weight x1 = [] for i in range(goods_num,0,-1): if flag[i][j] == i: x1.append(1) j = j - goods_weight[i-1] else: x1.append(0) x1.reverse() return x1 goods_num = 4 bag_weight = 10 values = [1,3,5,9] goods_weight = [2,3,4,7] res,flag = bag2(goods_num,bag_weight,values,goods_weight) x1 = find_answer(flag,goods_num,bag_weight,goods_weight)