答:基于代码写出每个孩子能够拿到最大价值的最优解
(自己写出的答案在下面,欢迎各路大佬指教)
import random
end = {}
cc = []
def Li(num):
for i in range(0, int(num)):
aa = random.randint(1, 10)
bb = random.randint(1, 10)
dd = {
"liwu_id": int(i) + 1,
"tiji": aa,
"jiaz": bb,
}
cc.append(dd)
def list_count(ll):
count = 0
if ll:
for ii in ll:
count += int(ii)
return count
else:
return 0
def cou(max, renshu, liwu_list):
max = max
for ii in range(0, int(renshu)):
biaoji = 0
aa = []
tongji = 0
pop_list = []
for kkk in liwu_list:
if int(kkk["tiji"]) <= int(max):
pd = tongji + int(kkk["tiji"])
if pd <= int(max):
tongji = pd
aa.append(kkk)
pop_list.append(biaoji)
continue
biaoji += 1
for zzz in pop_list:
del liwu_list[zzz]
ids = int(ii) + 1
aas = "第{}个小朋友应该拿礼物编号:".format(str(ids))
if aa == []:
return []
end[aas] = aa
return end
def sort_by_age(cc):
ddd = cc.sort(key=lambda x: (-x["jiaz"], x["tiji"]))
return ddd
if __name__ == '__main__':
lishu_s = input('请输入礼物数量:')
renshu = input('请输入人数:')
Li(int(lishu_s))
maxx = input('请输入人的最大背包容量:')
print("礼物生成成功:请查看:")
print(cc)
sort_by_age(cc)
ends = cou(int(maxx), int(renshu), cc)
if ends == []:
print("本次分配不合理,请重新输入")
else:
print("请查看分配结果")
print(ends)



