第12届蓝桥杯省赛A组C++回路计数(统计哈密尔顿回路个数,状压dp,记忆化搜索,超详解)
答案:881012367360题意:给一个无向图,求哈密顿回路数分析:暴力思路就是数搜索路径,时间复杂度是O(n^n)级别的,超过15就跑不动了。所以需要优化。因为是计数问题,不是优化问题,带剪枝的回溯法也不适用。于是想到了记忆化搜索(类dp),看到21能想到状压dp,正好2的21次int能存下,先尝试使用 dp [2 ^ 21]一维数组,转换成2进制后1代表访问过,0代表没访问过,可以表示所有点是否被访问的状态,dp[state]存有多少种方式可以形成状态state。然后发现状态转移方程无法表示,.
原创
2022-01-05 21:18:22 ·
3935 阅读 ·
12 评论