通过动态编程(创建图表)来解决问题

时间:2018-07-05 11:21:08

标签: python dynamic

我有一个小任务要做,我真的不知道如何解决: 我有一些物件,这些物件具有一定的价值和重量,我必须确定要隐藏的对象,而不要隐藏的对象。另一个问题是体重,由于我的步履蹒跚,我也必须考虑一下体重。

从对象列表开始,这些对象由索引,价值,重量标记。在给定的最大重量的帮助下,我必须确定最高价值的物体,该物体不超过最大重量。这些对象只能使用一次。

我必须用python动态编程解决问题。显示线索引和列索引,直到可以优化对象(权重)为止。

我所代表的对象是价值和重量对:

示例:T [3] [5]显示了例如最高的可悲价值,可以通过3个最大权重为5的物体来解决。

如果您不想只知道物体的最大重量,也不想知道其他信息,则还必须保存。在每个条目中,T [i] [j] ypu也可以保存是否存在最高价值的物品。 (具有1或0),因为在每一行中只能存在一个对象。该标志还可以用于填充表格。因此,存在函数bestChoice(chart,item)。修改函数createChart(items,MAX),以便表条目可以从createChart中计算对和值以及所解释的标志(0或1) 构造的表T2可以在函数bestChoice的帮助下返回objetslist。实现该函数,以便返回值应该是一个列表,该列表将对象的0或1调整为0,或者是否在该部分中。

我知道任务很艰巨。如果您对任务有疑问,请询问。提前致谢。

 def createChart( items , MAX ):

      #Here should be the solution for creating a chart T from a given list of objects and maximum weight

 return ?

 def bestChoice( chart , items ):

 return ?     #the selection of items should be returned here

#Testcase

items = [(3,4),(1,1),(4,5),(3,4),(2,2)]
maxWeight = 8
T = createChart( items , MAX )
# T should be this 
#[[(0, 0) (0, 0) (0, 0) (0, 0) (0, 0) (0, 0) (0, 0) (0, 0) (0, 0)],
# [(0, 0) (0, 0) (0, 0) (0, 0) (3, 1) (3, 1) (3, 1) (3, 1) (3, 1)],
# [(0, 0) (1, 1) (1, 1) (1, 1) (3, 0) (4, 1) (4, 1) (4, 1) (4, 1)],
# [(0, 0) (1, 0) (1, 0) (1, 0) (3, 0) (4, 0) (5, 1) (5, 1) (5, 1)],
# [(0, 0) (1, 0) (1, 0) (1, 0) (3, 0) (4, 0) (5, 0) (5, 0) (6, 1)],
# [(0, 0) (1, 0) (2, 1) (3, 1) (3, 0) (4, 0) (5, 0) (6, 1) (7, 1)]]

#first component of the the last table item 
bestValue = T[-1][-1][0] #should return the maximal value  ( = 7 )

L = bestChoice( T , items)
#should be [0, 1, 1, 0, 1]

0 个答案:

没有答案