C++ 算法 : Pick n numbers from 2D Matrix based on certain conditions

标签 c++ c algorithm

我有一个大小为 [3][x] 的二维矩阵,其中填充了数字。我想根据条件从这个矩阵中选择 x 个数字

  1. 每一列中只有一个数字。
  2. 每行最多“m”个数字(所有 3 行的总数应为 x 个数字,且 3m > x)

我想找到这些选定的 x 个数字的最小可能总和。

我能够根据上述条件从矩阵中找到“x”小数字的迭代方法来选择数字。但我的答案不是最优的。 例如:

5 9 . . . . 
6 15 . . . .
7 19 . . . .

假设最初拾取了 5(因此现在无法拾取 6 和 7)。稍后我们尝试选择 9,但如果 row(0) 的 m 个元素结束,我们将不得不选择 15。现在我们的解决方案将是 5+15 = 20,但我们可以使用 6+9 = 15 作为最佳解决方案。

我正在尝试优化我的解决方案并寻找更好的算法。有人可以为我提供一些最佳解决方案的好主意吗?

最佳答案

这个问题让我想起了这个:http://projecteuler.net/problem=345

匈牙利算法可能有效:http://en.wikipedia.org/wiki/Hungarian_algorithm

关于C++ 算法 : Pick n numbers from 2D Matrix based on certain conditions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11659972/

相关文章:

c++ - 使用函数调用退出 While 循环

c++ - 如何使用 Python 和/或 Lua 编写可编写脚本的讨厌的 C++ 程序?

c++ - int **a 和 int a[][] 作为 C 和 C++ 中的函数参数之间的确切区别是什么?

c - 通过fd获取目录路径

c# - 在每行算法中找到最高分

c++ - 如何将 Windows 中的 CodeBlocks MingW 编译到 Ubuntu 或 Centos

c++ - 使用 C/C++ 检测函数

c - 为什么这段代码给出了错误的文件描述符

algorithm - 砍掉棍子 HackerRank 挑战 Lisp 实现

algorithm - 递归求和二维数组的元素?