示例: 您有4个名为P,Q,R,S的购物篮。 您在这些购物篮中有4个商品,分别为A,B,C,D。
篮子的组成如下 PIC
- A B C D
P 6 4 0 7
Q 6 4 1 1
R 4 6 3 6
S 4 6 2 3
篮子P具有6A,4B,无C和7D。
假设您收到以下请求: 您必须给出10A,10B,3C和8D。
处理请求的最小购物篮数量为2(P,R)。
如何通过算法实现这一目标。我应该使用什么算法,应该采取什么策略?
答案 0 :(得分:2)
使有向图(网络)像这样:
源具有成本= 1,容量= P,Q,R,S节点的最大价值的边缘
P的边成本为0,容量为6,4,7至A,B,D,其他篮子相同。
A,B,C,D的边成本为0,容量为10、10、3、8,要下沉
现在求解Minimum-cost flow problem以获得10 + 10 + 3 + 8流量。
答案 1 :(得分:0)
有一种算法可以将皇后放在棋盘上的正确位置,并且规则是他们不得互相威胁。您的问题对我来说就像那样。您可以创建如下的递归结构:
查找满足要求的第一行:在您的示例P和Q中(因为6 + 6> 10) 因此,您处理了第一列,然后转到第二列,检查篮子P和Q的容量是否满足要求:在您的情况下,它们不符合要求(因为4 + 4 <10)
在这里返回第一步(通过增加之前显示B的指针为第一列调用相同的递归函数),然后找到满足要求的第二行。以P和R为例。 (6 + 4 = 10)然后对P和R执行第二步。
因此,想法是在每一列中找到符合要求的篮子,然后转到第二列。如果找到符合要求的行,则继续执行3。如果在第三步中找不到行,则返回第二步;如果在第二步中选择的行的组合均不符合要求,则再次返回。首先并再次进行迭代。
我不能正确地给你一个伪代码,但是我认为主要思想很明确,并且很难实现。