蓝桥杯-回路计数(状态压缩、动态规划)

news/2024/11/24 6:25:06/

题目描述

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

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

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

提示:建议使用计算机编程解决问题。

答案提交

这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

运行限制

最大运行时间:1s
最大运行内存: 128M

思路和参考代码

本题可以使用动态规划的方法解决。

我们用 1 , 2 , . . . , 21 1,2,...,21 1,2,...,21表示某1栋楼,设全集 A = { 1 , 2 , . . . , 21 } A = \{1,2,...,21\} A={1,2,...,21}。设状态 S V , l S_{V,\ l} SV, l表示访问了子集 V V V中的全部路径(每个点均只访问1次)且最后一次落点在 l l l处的可行解的个数,其中 V ⊆ A V \subseteq A VA l ∈ V l \in V lV。即有动态规划方程
S V , l = ∑ a ∈ V 且 a , l 互质 S V − { l } , a S { 1 } , 1 = 1 S_{V,\ l} = \sum_{a\in V且a,l互质} S_{V- \{l\},\ a} \\S_{\{1\},\ 1 }= 1 SV, l=aVa,l互质SV{l}, aS{1}, 1=1

最终的答案为 ∑ i = 2 21 S A , i \sum_{i=2}^{21}{S_{A,\ i}} i=221SA, i。由于只有21栋楼,因此在实现时路径集合 V V V只需要使用位集压缩在1个int变量中,如经过了完整的21栋楼,经过的路径为0x1fffff

完整实现如下:

public class Main {static boolean[][] isConnected = new boolean[22][22];static final int MAXN = 0x1fffff;static long[][] counts = new long[MAXN + 1][22];static void init() {for (int i = 1; i <= 21; i++) {for (int j = i + 1; j <= 21; j++) {boolean flag = false;for (int k = 2; k <= i; k++) {if (i % k == 0 && j % k == 0) {flag = true;break;}}if (!flag) {isConnected[i][j] = isConnected[j][i] = true;}}}}static void debug() {for (int i = 1; i <= 21; i++) {for (int j = i + 1; j <= 21; j++) {if (isConnected[i][j])System.out.printf("%d %d\n", i, j);}}}static void dp() {counts[1][1] = 1;for (int i = 1; i <= MAXN; i++) {for (int j = 1; j <= 21; j++) {if (((i >> (j - 1)) & 1) == 0)continue;for (int k = 1; k <= 21; k++) {if (((1 << (k - 1)) & i) != 0 || !isConnected[j][k])continue;counts[i | (1 << (k - 1))][k] += counts[i][j];}}}}static void printAnswer() {long cnt = 0;for (int i = 1; i <= 21; i++) {if (isConnected[i][1])cnt += counts[MAXN][i];}System.out.println(cnt);}public static void main(String[] args) {init();
//        debug();dp();printAnswer();}
}

http://www.ppmy.cn/news/231455.html

相关文章

crt计算机图形系统是什么东西,计算机图形系统功能.PPT

计算机图形系统功能 3.3.2 激光打印机 激光打印机是一种既可用于打印字符又可用于绘图的设备 。 激光打印机的工作原理 1)激光打印机主要由感光鼓、粉盒、打底电晕丝和转移电晕丝等组成&#xff0c;如图(a)所示。 滚筒 转移 电晕丝 打印纸 打 底 电 晕 丝 感光鼓 碳粉 (a) 2)激…

计算机组成原理 外部设备分为,【2017年整理】计算机组成原理_8_外部设备.ppt

【2017年整理】计算机组成原理_8_外部设备 第8章 外部设备;一个完整的计算机硬件系统由两大部分组成&#xff1a;一是由中央处理器(CPU)和主存储器(MM)组成的主机&#xff0c;二是外部设备。外部设备是指连接到主机上的任何设备&#xff0c;简称外设&#xff0c;又称外围设备。…

IGBT功率半导体器件

IGBT功率半导体器件 IGBT在MOSFET基础上升级&#xff0c;市场空间增速快。IGBT 作为半导体功率器件中的全控器件&#xff0c;由BJT(双极型三极管)和MOSFET(绝缘栅型场效应管)组成的复合全控型电压驱动式功率半导体器件&#xff0c;有MOSFET 的高输入阻抗和GTR 的低导通压降两方…

计算机组成原理题库(2)

计算机网络题库 目录 计算机网络题库 1.选择题 2.填空题 3.分析判断题&#xff08;可能会有重复&#xff0c;大家跳着看&#xff09; 4.计算题 5.简述题 1.选择题 1.总线通信中&#xff0c;若发送方和接收方设备的速度有差异&#xff0c;但不是特别大&#xff0c;则最适…

分立元器件——电阻器

基本概况 1.1 电阻的概念 导体对电流的阻碍作用就叫该导体的电阻。电阻&#xff08;Resistor&#xff0c;通常用“R”表示&#xff09;是一个物理量&#xff0c;在物理学中表示导体对电流阻碍作用的大小。导体的电阻越大&#xff0c;表示导体对电流的阻碍作用越大。不同的导体…

沉铜/黑孔/黑影工艺,PCB该 Pick 哪一种?

自 1936 年&#xff0c;保罗艾斯纳正式发明了 PCB 制作技术&#xff0c;到现在&#xff0c;已过去 80 余年&#xff0c;PCB 迅猛发展&#xff0c;并且成为电子行业必不可少的基础。虽然 PCB 一般只占成品电路板 5~10%的成本&#xff0c;但 PCB 的可靠性&#xff0c;却远比单一的…

亚马逊国际站获取商品列表

目录 亚马逊中国站获取全部商品分类 亚马逊中国站获取商品列表 亚马逊中国站通过ASIN获取商品信息 亚马逊中国站获取商品库存信息 亚马逊国际站获取全部商品分类 亚马逊国际站获取商品列表 亚马逊国际站处理图形验证码 亚马逊国际站通过ASIN获取商品信息 亚马逊国际站获取商品…

计算机基础学习记录2-2

内存储器 存储器的层次结构 典型存取时间用途存储容量1ns寄存器KB2nscache存储器MB10ns主存储器&#xff08;RAM和ROM&#xff09;GB10ms辅助存储器&#xff08;闪存、硬盘、U盘&#xff09;100GB~几个T10s后备存储器&#xff08;磁带库、光盘库&#xff09;10~100TB 内存储…