- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我一直在尝试解决一个问题,我必须计算一项随机运动的可能团队编队数量。
输入是这样的:
P → Number of Team Players
R → Roles
[Min, Max] → Role 0
[Min, Max] → Role 1
...
[Min, Max] → Role r-1
----------
Min= Minimum number of Players for the Role
Max= Maximum number of Players for the Role
以 Sport1 为例。假设 Sport1 有 3 种类型的角色(A、B、C),现在让我们想象每支球队有 8 名球员。
8 → Number of Team Players
3 → Roles
[3 , 7] → Role A
[1 , 5] → Role B
[0 , 2] → Role C
Valid team formations: [
3-5-0
,3-4-1
,3-3-2
,4-4-0
,4-3-1
,4-2-2
,5-3-0
,5-2-1
,5-1-2
,6-2-0
,6-1-1
,7-1-0
]Number of valid Team Formations: 12
我已经通过遍历每一种可能的阵型解决了这个问题,如果每个角色中的球员总和等于团队球员的数量,那么将最终结果加一。否则加零 a.k.a. 对下一个组合做同样的事情直到没有结束。
3+5+0 = 8 → 有效的团队构成。
3+5+1 > 8 → 无效组队
3+4+0 < 8 → 无效组队
这一切都是有趣的游戏,直到玩家数量达到 40 左右,角色数量达到 20 左右,每个角色的 Min = 0 和 Max = 40。
例子:
40
20
[0; 40] → Role A
[0; 40] → Role B
...
[0; 40] → Role T
在这种情况下,我需要检查 40^20 种可能的编队,因为我已经通过仅对角色 A 0 进行了一些削减,然后乘以 20,但仍然需要检查 40^19 种不同的组合。
这个问题必须用动态规划来解决。我已经使用 DP 解决了一些问题(序列问题、最大利润草莓箱),但似乎找不到解决这个问题的方法。
有人可以就如何解决这个问题和/或我可以在网上或书中找到的类似问题给出一些线索,这些问题可以引导我找到 DP 解决方案吗?
最佳答案
动态编程问题通常以您按顺序排列问题的各个部分而告终,这样您就可以从左到右解决它们,在第 n 阶段做足够的工作,以便您可以引用它以获取第 n 阶段的所有信息n+1.
在这里,您可以将前 n 个角色视为前 n 个阶段,因此在您的示例中,前 n 行如“[Min, Max] → Role 0”。在第 n 阶段,对于最大 P 的所有可用玩家数量,我将计算仅使用前 n 个角色和最多该数量的玩家可以组成的不同阵型的数量。
在第 n+1 阶段,对于每个可用的玩家数量,我会考虑角色 n+1 中的所有合法玩家数量。从我目前正在考虑的球员数量中减去它,我得到前 n 个角色剩下的球员数量,我查找存储在那里的答案以获得前 n 个角色的不同阵型的数量。将这些可能性相加,我得到了我可以使用该数量的球员来弥补前 n+1 个角色的阵型数量。显然,我对直到 P 的所有数字重复此操作以获得我需要为阶段 n+1 存储的答案 - 除非这是最后阶段,在这种情况下只需要 P 个玩家的答案。
如果您做出的决策可以按阶段从左到右排列,其中每个阶段的答案不依赖于太多信息,并且可以根据前面阶段的答案计算,那么动态规划通常是一种实用的方法解决问题。如果您准备在每个阶段存储和计算大量可能性,您几乎可以将任何问题转化为动态规划问题,但最终这个数字会变得如此之大,以至于所谓的解决方案变得非常不切实际。
例如,在上面的问题中,第二阶段是以下只有两个角色 A 和 B 的问题。
[3 , 7] → 角色 A
[1 , 5] → 角色 B
在原题中,如果P=8,即如果你有8名队员,你需要求出不同阵型的总数。第二阶段的问题是,如果只有两个角色,计算阵数,但是你需要计算0人、1人、2人……最多8人的阵数。然后当你计算出第三阶段的答案时,你可以说,例如“如果我把 3 名球员放在角色 C 中,我还剩下 5 名球员和两个角色,我可以看看我已经为这两个角色计算出的答案—— 5 人角色问题,看 3 人角色 C 有多少阵型。”
关于algorithm - 动态规划找到所有可能的团队组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29185605/
$ flutter ios build --release 它显示多个可用的有效开发证书(您的选择将被保存): 但是它没有显示分发证书选择,不过我使用了--release标志,,, 我检查过我已经在本
我有一个 Jenkins Bitbucket 团队/项目工作。 在我的存储库中的 Jenkinsfile 中,我使用“git describe”来获取当前标签。 在我更新到最新的 Jenkins 版本
您会在新的 .NET 开发团队中实现哪些最佳实践和方法? 干杯 最佳答案 仅使用 Visual Studio 如果您需要数据库,请使用服务器(尽早减少 SQL 问题) 使用版本控制 关于c# - .N
我有 3 个表用户、团队、组。每个团队可以有多个组。每个组中都有一个或多个用户。用户可以属于多个组。您认为对所有用户使用组会更好吗(这样每个团队至少有一个名为所有用户的组)还是引入另一个表 team_
问题: 让我们考虑以下场景: 让T={t_1, t_2, ..., t_h}成为一组不同的游戏。每场比赛都是一对一的(它们是单人游戏)。 设n为players的个数,每个游戏都有一个已知的性能度量这个
我们有 5 个人在从事同一个项目,并且在 Bitbucket 中有多个 GIT 存储库。每个用户都有自己的 Bitbucket 帐户。我正在寻找拥有某种团队或组织功能的最佳实践方法,以便我们都可以在相
我们在实现 Team Foundation Build Server 时遇到了性能问题,而且我对如何加快速度没有任何想法。我们已经添加了一些 PropertyGroup 元素来提高几个步骤(SkipC
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 8年前关闭。 Improve this qu
我为我是所有者的团队 channel 设置了 Azure DevOps 连接器。它一直工作正常,但现在我需要调整一些设置,因为我不希望它宣布取消部署。因此,我打开连接器、已配置、AzureDevops
我们有一个团队机器人,可以在 MS 团队中发布消息。新对话的第一个事件总是一张自适应卡片,我们偶尔会用一张新卡片更新它。这一切正常,直到我用这个机器人组建了一个新团队。 我们正在尝试使用 Update
What do I need to install to activate this button Share Project in Eclipse?I need to transfer the pr
我创建了一个解决方案,其中包含我的所有项目,包括 Dotfuscator 项目和设置项目。 某些 Dotfuscator 项目仅对某些程序集进行了模糊处理,而不会影响它们的任何引用。 从 Visual
如何观察Variable来自一组团队 ( Variable ),以便每次 Game出现( Variable 由于游戏数组被修改而改变),数组 Team是否应该进行相应更新,例如比赛两支球队的得分、胜利
我的问题是我所有的应用程序 ID 都相同。我认为它们应该是不同的以识别它们。即使我尝试创建新的配置文件,它也不给我更改 ID 或生成新配置文件的选项。我正在尝试为我的一个应用程序设置 ICloud,我
熬夜工作到上午 1030 点并完成作业后,我决定在格式化并提交作业之前小睡一会儿。不用说,午睡变成了 5 小时的 sleep 时间。 醒来后,我将代码格式化为 java 的 eclipse googl
我是 3 个注册 iOS 开发团队的成员: 我的个人 iOS 开发者帐户。 我的企业 iOS 开发者客户团队。 我客户的 iOS 开发者客户团队。 我现在想使用 iOS Provisioning Po
目标:MS Teams 在双显示器上的可访问性行为,显示器设置为不同的比例,例如 100% 和 125%,分辨率为 1920*1080。我使用的工具是 Accessibility Insight。 问
最近注意到在 MS CRM 2011 中无法从工作流步骤创建/更新业务部门或团队。 为什么要制作它,是否有任何解决方法? 最佳答案 遗憾的是这是设计使然。您需要创建自定义工作流事件来创建/更新业务部门
你们这里有些奇怪。 我们有一个相当复杂的解决方案(在asp.net,silverlight,WFC,Ria Services等中分布了111个项目)解决方案,该解决方案可以在我的开发盒中正确构建(20
我们的技术总监希望测试运行后,能够在 Microsoft 团队 channel 中更新当前 testng 报告中的测试结果。 我们目前正在使用 testng 报告来分析测试运行后的报告。 我们可以将
我是一名优秀的程序员,十分优秀!