Bonnie和Clyde是两个决定抢劫珠宝的小偷 故事。每个人都有一个袋子,他们将用来携带他们的战利品,但每个袋子 在断裂之前只能容纳n克珠宝。他们是商店 抢劫有几种不同类型的珠宝,每种都有自己的珠宝 重量和货币价值。
- 克莱德填充行李的方法是“贪婪”。这意味着他一次一个地将珠宝添加到他的包里,并选择哪一颗宝石 接下来,他总是选择最有价值的珠宝 不会让他超过重量限制。
- 如果克莱德有两个价值相同但重量不同的珠宝之间的选择,他总会选择较轻的珠宝。
- Bonnie认为,如果她对自己的包包装的方式更加聪明,她会经常离开珠宝店,获得更有价值的运输 比克莱德。你的任务是帮助表明这是真的。为此, 你会写一个程序,jewelthief.py,它将作为输入a 珠宝清单(每个都有一个以克为单位的重量和一个以美元计的价值) 和包的重量限制。然后你的程序将输出 使用贪婪选择时袋中珠宝的总价值 方法,以及该值与最大可能值的比较, 您将使用动态编程计算。输入将是 通过标准输入给出。
- 第一行输入将包含一个整数,该整数对应于行李可以容纳的最大重量。
- 以下每一行都包含两个整数,并将定义一个新的宝石类型。
- 第一个整数将是以克为单位的宝石的重量,第二个整数将是该宝石的美元价值。
注意,您可以假设被盗的商店有无限制 每种宝石的数量。
示例输入1:
10 3 4 2 3 1 1
示例输出1:
The greedy approach would steal $13 of jewels The optimal approach would steal $15 of jewels
示例输入2:
575 125 3000 50 100 500 6000 25 30
示例输出2:
The greedy approach would steal $6130 of jewels The optimal approach would steal $12130 of jewels
示例输入3:
1500 151 150 150 150
示例输出3:
The greedy approach would steal $1500 of jewels The optimal approach would steal $1500 of jewels
我对python很新,这个问题让我很困惑。 我无法计算如何计算宝石价值,并加起来并停止两个小偷的最大重量。
到目前为止,这是我的代码:
bag=input('max_weight of bag: ') #weight of the bag
Clyde_value=0 #initialize weight and value for both thieves
Clyde_weight=0
Bonnie_value=0
Bonnie_weight=0
while True:
try:
line=input() #input weights and values at once
except:
break
if len(line)==0:
break
a=list(map(int,line.split(None)))
if len(line)<1:
break
lst=[]
lst.append(a)
#print(a) #this will printout the list below when enter the sample input 1
#[3, 4]
#[2, 3]
#[1, 1]
weight_jewel=a[0] #print this will give 3 2 1 for sample input 1
value_jewel=a[1] #print this will give 4 3 1 for sample input 1
while Clyde_weight <= bag: #start calculating clyde's jewel value
我不太确定我的代码是否适合这个问题。请给我一些建议和提示,或者一个例子会很棒。非常感谢你。