weinan030416

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

回路计数

题目描述

蓝桥学院由 2121​​​ 栋教学楼组成,教学楼编号 11​​ 到 2121​​。对于两栋教学楼 a​​ 和 b​,当 a​ 和 b​ 互质时,a 和 b 之间有一条走廊直接相连,两个方向皆可通行,否则没有直接连接的走廊。

小蓝现在在第一栋教学楼,他想要访问每栋教学楼正好一次,最终回到第一栋教学楼(即走一条哈密尔顿回路),请问他有多少种不同的访问方案?

两个访问方案不同是指存在某个 i,小蓝在两个访问方法中访问完教学楼 i 后访问了不同的教学楼。

复制代码
//881012367360
#include <bits/stdc++.h>
#define int long long
using namespace std;
int dp[1 << 22][22] , g[22][22];
signed main()
{
    int n = 1 << 21;
    for(int i = 1 ; i <= 21 ; i ++) for(int j = 1 ; j <= 21 ; j ++){
        if(__gcd(i , j) == 1) g[i - 1][j - 1] = g[j - 1][i - 1] = 1;
    }
    dp[1][0] = 1;
    for(int i = 1 ; i < n ; i ++){
        for(int j = 0 ; j < 21 ; j ++){
            if(!(i >> j & 1)) continue ;
            for(int k = 0 ; k < 21 ; k ++) {
                if(!g[j][k] || (i >> k & 1)) continue ;
                dp[i + (1 << k)][k] += dp[i][j];
            }
        }
    }
    int res = 0;
    for(int i = 0 ; i < 21 ; i ++) {
        res += dp[n - 1][i];
    }
    cout << res << '\n';
    return 0;
}
复制代码

 

posted on   楠030416  阅读(24)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示