From 4b931580d4ebb32a0d7dcedc7083cb9422b61535 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E6=B5=B7?= <10402852@qq.com> Date: Wed, 28 Feb 2024 14:11:21 +0800 Subject: [PATCH] 'commit' --- .../ZhongGaoJi/LanQiao14STEMA202303/BC4.cpp | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 TangDou/LanQiaoBei/ZhongGaoJi/LanQiao14STEMA202303/BC4.cpp diff --git a/TangDou/LanQiaoBei/ZhongGaoJi/LanQiao14STEMA202303/BC4.cpp b/TangDou/LanQiaoBei/ZhongGaoJi/LanQiao14STEMA202303/BC4.cpp new file mode 100644 index 0000000..12b08f6 --- /dev/null +++ b/TangDou/LanQiaoBei/ZhongGaoJi/LanQiao14STEMA202303/BC4.cpp @@ -0,0 +1,42 @@ +#include +using namespace std; +const int N = 110; +int n, m, ans, st[N]; +int a[N][N]; + +bool check(int u) { + for (int i = 1; i < u; i++) + if (st[i] && a[u][i]) return false; + return true; +} + +void dfs(int u, int sum) { // 第u号钻石,之前一共选了sum个钻石 + if (u == n + 1) { // 如果所有钻石都找完了 + ans = max(ans, sum); // 取最大值 + return; + } + // 如果剩下的钻石都选也没有已有的最好情况多,返回,剪枝 + // if (ans > sum + (n - u + 1)) return; + + if (check(u)) { // 当前钻石与已选钻石没有冲突 + st[u] = 1; // 选之 + dfs(u + 1, sum + 1); // 继续下一个钻石 + st[u] = 0; // 不选 + } + + dfs(u + 1, sum); // 继续下一个钻石 +} + +int main() { + cin >> n >> m; + while (m--) { + int x, y; + cin >> x >> y; + a[x][y] = a[y][x] = 1; // x<->y互相冲突 + } + + dfs(1, 0); // 从第一个钻石开始选,目前已选0个 + cout << ans << endl; + + return 0; +} \ No newline at end of file