求证时间复杂度
  • 板块学术版
  • 楼主dlsnb
  • 当前回复7
  • 已保存回复7
  • 发布时间2023/9/2 23:56
  • 上次更新2023/11/2 23:44:59
查看原帖
求证时间复杂度
910101
dlsnb楼主2023/9/2 23:56
#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!!)O(n!!)

本人复杂度计算有点弱,还有一个问题

如果 ii 没有从 startstart 开始枚举,时间复杂度仍不变嘛

2023/9/2 23:56
加载中...