#==============================================================================
# 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)