这是一个典型的旅行商问题(TSP)的变形,可以用动态规划解决。

假设矩阵为M,N为其维度,令dp[i][j][k]表示已经选定了前i行,第i行选择了第j列,前i-1行的选择状态为k时,所得到的最大值。

其中,k是一个二进制数,表示前i-1行每列是否选过,具体的,若第j列被选过,则k的第j-1位为1,否则为0。

转移方程为:

dp[i][j][k] = max(dp[i][j][k], dp[i-1][p][k^(1<<(p-1))] + M[i][j])

其中,p为前一行选择的列数,k^(1<<(p-1))表示将二进制数k的第p-1位取反(0变1,1变0)的结果,表示前i-1行的状态去掉第p列的状态。

最终的答案为:

max(dp[N][j][2^N-1]),其中j表示最后一行选择的列数,2^N-1表示所有列均被选过的状态。

时间复杂度为O(N^3*2^N)。

如何计算N*N维矩阵中的N数之和,值最大,每行每列仅选一个

原文地址: https://www.cveoy.top/t/topic/nE3 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录