我认为我有一个比较有用的解决方案,但真的很想知道是否有人有更好的方法。我也不确定如何正确定义我遇到的问题类型,这意味着我没有做过太多谷歌搜索。
问题: 我有未知数量的玩家正在为游戏选择角色。有效角色为 1-5。玩家必须选择主要角色,但他们也可以选择次要角色。他们的次要角色的选项是“无”、1-5 之一(不同于他们的主要角色)或“任何”。然后我必须将玩家分成 5 人一组,每个团队需要每个号码中的一个。目标是最大限度地增加正确组建的团队的数量。
我目前的解决方案: 将玩家分为 3 组:A)选择“无”作为次要的人,B)选择数字作为次要的人,C)选择“任何”作为次要的人
用 A 组的球员填补团队,将他们作为主要角色。
计算现有的非完整团队中剩余的空缺职位数量
统计 B 组(主要和次要)所代表的角色数量
根据空缺职位的数量,开始添加 B 组的球员 - 填补职位的顺序是从最大的赤字到最小的赤字,优先选择那些作为其他角色的球员的数字最大B组中的大小(按表示)
用C组填空
如果情况变得更糟,我总是可以将人们分组,而不考虑他们喜欢的角色,但理想情况下我会创建正确的组。
最佳答案
主要和次要角色对团队平衡的影响是否相同?如果是这样,您可以从团队的角度以及每个团队当前角色/需求的状态来看待问题。
例如,A 队的第一个人可能同时是 1 和 3,所以 A 队有 1 和 3。A 队的下一个人在主要或次要角色中不应是 1 或 3 .使用剩余的团队需求(角色 2、4、5),您可以迭代可能的成员,直到 1) 团队已满/平衡或 2) 没有剩余的候选人。
还有更多的问题吗?我觉得我没有弄清楚整个问题。
关于algorithm - 根据两个特征将组分类为子组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33337537/