【发布时间】:2013-11-21 14:34:02
【问题描述】:
我正在整理一个 java 小程序,以使任务在工作中更快、更高效。
用户定义需要将项目列表分成三个组的大小。列表中的每个项目都有不同的值,具体取决于它被放入三个组中的哪一个。小程序需要显示总价值最高的组合。
示例: 具有列的二维整数数组;项目编号、第 1 组值、第 2 组值和第 3 组值。
16 2 2 5
19 6 0 3
24 1 4 4
25 4 2 3
27 4 2 3
29 3 3 3
31 5 3 1
32 5 2 2
这样,用户定义组 1 有 3 个插槽,组 2 有 3 个插槽,组 3 有 2 个插槽。
小程序应不按特定顺序显示以下解决方案
Group 1: 19, 31, 32
Group 2: 24, 27, 29
Group 3: 16, 25
OR
Group 1: 19, 27, 32
Group 2: 24, 29, 31
Group 3: 16, 25
OR
Group 1: 19, 31, 32
Group 2: 24, 25, 29
Group 3: 16, 27
OR
Group 1: 19, 25, 32
Group 2: 24, 29, 31
Group 3: 16, 27
尽管所有可能的顺序,我都可以管理一种效率不高的方式来运行数组,但它会产生重复的解决方案(即 16,25 和 25,16)。我确信有一种方法可以总结所有可能的组合,而无需重新排列数组。此刻,我实在无法理解它。如果你们中的任何人有这种方法,我将不胜感激。
【问题讨论】:
-
这不是 java/arrays/applet 问题,而是算法问题。
-
啊,是的,谢谢。我想不出合适的标签,所以我从它提供的标签建议中获取。
-
这是一个相当有趣的问题。起初我以为是背包问题,但这并不是因为每个元素的大小都相同。只用两组解决起来要容易得多,但我不确定如何推广到三个......
-
这是一种赋值问题。但是,我认为分配问题只能给出一个解决方案。
-
只有3个列表吗?
标签: java algorithm combinatorics mathematical-optimization