#include <iostream>
#include <vector>
#include <set>
using namespace std;
#define N 17
typedef long long ll;
typedef pair<int, int> pii;
int d[N][N];
int n;
ll ans = 0;
bool mark[N];
void dfs(int start, ll sum) {
bool flag = true;
for (int i = start + 1; i <= n; ++i) {
if (!mark[i]) {
for (int j = i + 1; j <= n; ++j) {
if (!mark[j]) {
flag = false;
mark[i] = true;
mark[j] = true;
dfs(i, sum + d[i][j]);
mark[i] = false;
mark[j] = false;
}
}
}
}
if (flag) {
ans = max(ans, sum);
return;
}
}
int main(int argc, const char * argv[]) {
scanf("%d", &n);
for (int i = 1; i <= n; ++i) {
for (int j = i + 1; j <= n; ++j) {
scanf("%d", &d[i][j]);
}
}
dfs(0, 0);
printf("%lld\n", ans);
return 0;
}
今天 atc D 题,想知道这种写法复杂度是否也是 O(n!!)
本人复杂度计算有点弱,还有一个问题
如果 i 没有从 start 开始枚举,时间复杂度仍不变嘛