You are on page 1of 1

1 #第一筆輸入,物品種類數、負重上限

2 nBStr = input()
3 nB = nBStr.split()
4 n = int(nB[0])
5 B = int(nB[1])
6
7 #第二三筆輸入,重量及效用
8 wstr = input()
9 wlist = wstr.split()
10 vstr = input()
11 vlist = vstr.split()
12
13 w = int()
14 W = int() #幫助計算重量
15 v = int()
16 V = int() #幫助計算效用
17 m = [] #[重量,-效用(方便排序),效用,物品編號,數量]
18 all = [] #將全部資料做成一個清單
19
20 #做出清單all
21 for i in range(n) :
22 m = []
23 m.append(int(wlist[i]))
24 m.append(-(int(vlist[i])))
25 m.append(int(vlist[i]))
26 m.append(i)
27 m.append(1)
28 all.append(m)
29
30 #將all裡面的清單依重量由大到小,效用由小到大,物品編號排列
31 all.sort()
32 all.reverse()
33
34 #計算出每種物品都戴的重量
35 for i in range(n) :
36 w = 0
37 w = all[i][0]*all[i][4]
38 W += w
39
40 #若W>B,則將最重且效用最低的物品捨去
41 i = 0
42 while W > B :
43 all[i].pop(4)
44 all[i].append(0)
45 W = W - all[i][0]
46 if W <= B :
47 break
48 else :
49 i += 1
50
51 #算出餘下物品的總效用
52 for i in range(n) :
53 v = 0
54 v = all[i][2]*all[i][4]
55 V += v
56
57 #只留下all清單中,物品編號及數量的部分
58 for i in range(n) :
59 all[i].pop(0)
60 all[i].pop(0)
61 all[i].pop(0)
62
63 #將all清單依物品編號由小到大排列,並印出數量,總重量及總效用
64 all.sort()
65 for i in range(n) :
66 print(all[i][1],end = " ")
67 print(W,V)

You might also like