给出N个不同的糖果和M个孩子。每个孩子都需要K[i]
种不同的糖果,只有当他得到他要求的所有不同的糖果时才会感到高兴。
现在我希望最大限度地增加幸福的孩子数量。我应该如何分发糖果?
示例:我们有N=4
个糖果和M=3
个孩子:
这里的答案是2,因为我最多只能让第1和第3个孩子高兴。
我的尝试:
按照他们要求快乐的金额(即K [i])给孩子们糖果。换句话说,如果你对所有要求较少的孩子感到高兴,你应该只给孩子一个糖果,每当你给他们中的一个给你糖果时,你必须给他们所需的全部金额。
此解决方案是否正确?
答案 0 :(得分:1)
是的,你错了。考虑:
想要1号,2号,3号和4号糖果。
想要糖果1,5,6,7,8和9。
想要糖果2,10,11,12,13,14和15。
想要糖果3,16,17,18,19,20和21.
想要糖果4,22,23,24,25,26和27。
您的算法只会让孩子1高兴。但你可以让2,3,4和5快乐。
答案 1 :(得分:0)
由于这是正在进行的编程竞赛中的一个问题,我不能给你很多答案,但会推动你朝着正确的方向发展。你正在解决的问题是np完整,因为它可以减少到最大的独立集合,因此它只能在一般情况下使用强力试图解决所有组合。您可以通过检查添加的新集合是否与另一个不相交来减少计算,这样就可以跳过很多无效组合。