#include <iostream>
using namespace std;
int n, a[22][22], b[22][22], vis[22], pre[22], ans;
void dfs(int x, int s) {
if (x > n) {
ans = max(ans, s);
return;
}
if (s + pre[n] - pre[x - 1] < ans)
return;
for (int i = 1; i <= n; i++)
if (!vis[i]) {
vis[i] = 1;
dfs(x + 1, s + a[x][i] * b[i][x]);
vis[i] = 0;
}
}
int main() {
cin >> n;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
cin >> a[i][j];
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
cin >> b[i][j];
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++)
pre[i] = max(pre[i], a[i][j] * b[j][i]);
pre[i] += pre[i - 1];
}
dfs(1, 0);
cout << ans << endl;
return 0;
}
运动员最佳匹配问题
最新推荐文章于 2023-03-11 11:02:23 发布
本文介绍了一个使用深度优先搜索(DFS)解决特定问题的优化方案。通过预处理和剪枝策略减少搜索空间,实现了高效的求解过程。文章详细展示了如何为矩阵中的元素匹配寻找最优路径,并通过实际代码实现说明了这一过程。
摘要由CSDN通过智能技术生成