#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = (1 << 10);
int map[11][11];
int dp[N];
int main()
{
int n;
while(scanf("%d", &n) != EOF)
{
if(n == 0) break;
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
scanf("%d", &map[i][j]);
memset(dp, 0, sizeof(dp));
int te = (1 << n) ;
for(int s = 0; s < te; s++)
{
for(int i = 0; i < n; i++)
{
if(s & (1 << i)) continue;
for(int j = 0; j < n; j++)
{
if(s & (1 << j)) continue;
if(i == j) continue;
dp[s | (1 << j)] = max(dp[s | (1 << j)], dp[s] + map[i][j]);
}
}
}
int ans = 0;
for(int s = 0; s < te; s++) ans = max(ans, dp[s]);
printf("%d\n", ans);
}
return 0;
}
本文介绍了一段使用C++编程语言解决矩阵中寻找最大路径和的问题。通过动态规划的方法,作者详细解释了如何遍历矩阵并计算不同路径的和,最终找出最大的路径和。该文涉及的主要技术包括:C++编程、动态规划、矩阵操作和算法优化。
1931

被折叠的 条评论
为什么被折叠?



