这听起来很像0-1背包问题,其中最大值是通过将物品放入背包或不放入背包来计算的。以下是一个例子:
def knapsack(numItems, capacity, sizes, values):
if (numItems == 0 or capacity == 0):
return 0
if (sizes[numItems-1] > capacity):
knapsack(numItems-1, capacity, sizes, values)
return max(
values[values-1] + knapsack(numItems-1,capacity - weights[numitems-1], sizes, values),
knapsack(numItems-1, capacity, sizes, values))
当一个节点连接或未连接时,您希望获得最大值。当节点连接时,结果取决于节点的颜色。代码可能如下所示:
def ConnectNodes(numItems, capacity, sizes, values, nodeColor):
if (numItems == 0 or capacity == 0):
return 0
if (sizes[numItems-1] > capacity):
ConnectNodes(numItems-1, capacity, sizes, values, nodeColor)
return max(
RulesForProfit(numItems-1, nodeColor) + ConnectNodes(numItems-1,capacity - weights[numitems-1], sizes, values, nodeColor),
ConnectNodes(numItems-1, capacity, sizes, values, nodeColor))