最大的孩子幸福

时间:2014-03-11 11:00:30

标签: c++ algorithm

给出N个不同的糖果和M个孩子。每个孩子都需要K[i]种不同的糖果,只有当他得到他要求的所有不同的糖果时才会感到高兴。

现在我希望最大限度地增加幸福的孩子数量。我应该如何分发糖果?

示例:我们有N=4个糖果和M=3个孩子:

  • 第1个孩子需要2个(K [1])糖果:1和2
  • 第二个孩子需要2个(K [2])糖果:2和3
  • 第3个孩子需要2个(K [3])糖果:3和4

这里的答案是2,因为我最多只能让第1和第3个孩子高兴。

我的尝试:

按照他们要求快乐的金额(即K [i])给孩子们糖果。换句话说,如果你对所有要求较少的孩子感到高兴,你应该只给孩子一个糖果,每当你给他们中的一个给你糖果时,你必须给他们所需的全部金额。

此解决方案是否正确?

2 个答案:

答案 0 :(得分:1)

是的,你错了。考虑:

  1. 想要1号,2号,3号和4号糖果。

  2. 想要糖果1,5,6,7,8和9。

  3. 想要糖果2,10,11,12,13,14和15。

  4. 想要糖果3,16,17,18,19,20和21.

  5. 想要糖果4,22,23,24,25,26和27。

  6. 您的算法只会让孩子1高兴。但你可以让2,3,4和5快乐。

答案 1 :(得分:0)

由于这是正在进行的编程竞赛中的一个问题,我不能给你很多答案,但会推动你朝着正确的方向发展。你正在解决的问题是np完整,因为它可以减少到最大的独立集合,因此它只能在一般情况下使用强力试图解决所有组合。您可以通过检查添加的新集合是否与另一个不相交来减少计算,这样就可以跳过很多无效组合。