我有大约1000套大小<= 5,包含数字1到100.
{1}, {4}, {1,3}, {3,5,6}, {4,5,6,7}, {5,25,42,67,100} ...
Run Code Online (Sandbox Code Playgroud)
是否有可能找到一组包含最大给定集数量的20?
检查每个100!/(80!*20!)
集合是低效的.
我不太确定这是 NP 完全的。
考虑相关的问题,我们为每组获得 x 的奖励,但必须为我们想要允许的每个数字付出 y 的价格。(只有当集合中包含的所有数字都已支付时,集合才会支付奖励。)
您可以使用最大流算法解决此类问题:
解决该图上的最大流问题(从源节点到目标节点)会找到最小切割成本 c。
我们赚到的净钱是 Nx-c(其中 N 是套数)。
如果我们可以选择 y(例如通过二分),以便我们恰好选择了 20 个数字,那么我们就成功地求解了包含 20 个数字的集合的最大数量。