Description

A国有n个城市,编号为1到n,任意两个城市之间有一条路。shlw闲得没事干想周游A国,及从城市1出发,经过且仅经过除城市1外的每个城市1次(城市1两次),最后回到城市1。由于shlw很傻,他只愿意走一定长度,多了少了都不干,现在他想知道一共有多少种方案可供选择。

Input

第一行为两个整数n,l,分别为城市数和路程总长。
之后n行,每行n个整数,其中第i行第j列为Ai,j,满足Ai,i=0;Ai,j=Aj,i。

Output

输出共1行,为总方案数。

Sample Input

3 60 1 31 0 2 3 2 0

Sample Output

2

Data Constraint

对于30%,1<=n<=10
对于另外30%,1<=n<=14,1<=l<=30
对于100%,1<=n<=14,1<=Ai,j<=100,000,000,1<=l<=2,000,000,000
悄悄告诉你:数据的答案都很大,反正直接输0是没分的,但都在int范围内。
为了降低题目难度,Ai,j的种类数不会太多

题解

  • 题目大意:有n个城市,问每个城市都走一遍,路径长度刚好为L的方案数
  • 30%,暴力乱搜就好了,O(n!)
  • 60%,n<=14,状压dp,设f[i][j][k]表示当前经过的点的状态为i,现在在点j,当前路径长为k,O(2^n*n^2*30),听说加个map可以跑70分
  • 100%,n<=14,折半搜索可以过
  • 记前半段除了1与i长度为n1,后半段为n2,那么如果确定了i,只要满足前半段与后半段经过的点不重复且路径总长为l就可以计算答案了
  • 具体来说就是就是枚举一个点i,枚举前半段的所有情况,用hash记下来,再枚举后半段的所有情况
  • 并在hash中找到与之对应的前半段,统计进答案中就好了

代码

 1 #include <cstdio>
 2 #include <iostream>
 3 #include <cstring>
 4 #define mo 19260817
 5 #define ll long long
 6 #define N 15
 7 using namespace std;
 8 int n,m,l,a[N][N],f[mo],ans,i;
 9 ll g[mo];
10 ll calc(int x,int y,int k){ return x*32768000000000ll+y*2000000000ll+k; }
11 int gethash(int x,int y,int k)
12 {
13     ll r=calc(x,y,k);
14     for (i=r%mo;g[i]&&g[i]!=r;++i==mo?i=0:i);
15     return i;
16 }
17 void dfs1(int d,int x,int y,int k)
18 {
19     if (x&&k>=l) return;
20     if (d>=m)
21     {
22         int p=gethash(x,y,k);
23         g[p]=calc(x,y,k),f[p]++; return;
24     }
25     for (int i=1;i<n;i++) if (!(y>>i&1)) dfs1(d+1,i,y|1<<i,k+a[x][i]);
26 }
27 void dfs2(int d,int x,int y,int k)
28 {
29     if (x&&k>=l) return;
30     if (d>=m)
31     {
32         int p=gethash(x,((~y)&((1<<n)-1))|1|1<<x,l-k);
33         ans+=f[p]; return;
34     }
35     for (int i=1;i<n;i++) if (!(y>>i&1)) dfs2(d+1,i,y|1<<i,k+a[x][i]);
36 }
37 int main()
38 {
39     scanf("%d%d",&n,&l);
40     for (int i=0;i<n;i++) for (int j=0;j<n;j++) scanf("%d",&a[i][j]);
41     m=n/2,dfs1(0,0,1,0),m=n-m,dfs2(0,0,1,0),printf("%d",ans);
42 }

转载于:https://www.cnblogs.com/Comfortable/p/10339544.html

[折半搜索][has] Jzoj P4250 路径相关推荐

  1. 【折半搜索-经典题目】中山纪念中学暑期游Day13——【GDOI2017模拟8.15】Buy

    前言 考试时有道题目用到了[折半搜索] 老师推荐了这道经典题目让大家练习[前后部分算法不同]的题目 虽然不知道我有没有时间做,好歹先把题目记录一下,免得以后找不到了qwq 题目 Input Outpu ...

  2. 世界冰球锦标赛【折半搜索】

    >Link luogu P4799 >Description 给出预算MMM和NNN场比赛的票价,试求:如果总票价不超过预算,有多少种观赛方案. 如果存在以其中一种方案观看某场比赛而另一种 ...

  3. 西山居3.22笔试第一题(折半搜索)

    题意: 给出一个的表格,每个格子上都有一个数字.要求从左上角(1,1)出发,只能向下或向右走,走到右下角(m,n)视为结束.问有多少种走法能使得走过路径的总异或值等于. 输入: 第一行,三个数字,,, ...

  4. hexo 搜索_Hexo--本地搜索localsearch之url路径问题

    Hexo localsearch 本地搜索 路径问题 / 什么是本地搜索 针对本地存储文件内容进行搜索,也就是我们搜索的内容都在本地 Hexo 本地搜索 localsearch 我们用的本地搜素插件是 ...

  5. Codeforces Round #297 (Div. 2)E. Anya and Cubes 折半搜索

    Codeforces Round #297 (Div. 2)E. Anya and Cubes Time Limit: 2 Sec  Memory Limit: 512 MB Submit: xxx  ...

  6. [luogu4799 CEOI2015 Day2] 世界冰球锦标赛(折半搜索)

    传送门 Solution 折半搜索裸题,注意\(long long\) Code #include <cmath> #include <cstdio> #include < ...

  7. Educational Codeforces Round 76 (Rated for Div. 2) F. Make Them Similar 折半搜索

    传送门 文章目录 题意: 思路: 题意: 思路: 一个显然的思路就是2302^{30}230枚举所有的xxx,让后再检查,这个复杂度显然不能接受. 又发现对于每个位置它取多少不受其他位置限制,满足可拼 ...

  8. 【LOJ6072】苹果树【折半搜索】【矩阵树定理】【二项式反演】

    题意:有好坏两种点共 nnn 个,每个好点有权值,把这 nnn 个点连成一棵树,一个好点为有用的当且仅当它至少与一个好点相邻,求所有有用的点的权值和不超过 limlimlim 的方案数. n≤40n\ ...

  9. 【无码专区4】幸运数字4(折半搜索+计数+结论)

    因为只有std,没有自我实现,所以是无码专区 主要是为了训练思维能力 solution才是dls正解,但是因为只有潦草几句,所以大部分会有我自己基于正解上面的算法实现过程,可能选择的算法跟std中dl ...

最新文章

  1. 014_TimePicker时间选择器
  2. opencv 一种灰度图像增强方式
  3. 王者荣耀4月14日服务器维护,王者荣耀4月14日更新了什么内容?4月14日更新内容介绍...
  4. linux中demo当前目录,Linux pwd命令:显示当前路径
  5. uc 开发 缓存css,使用css3 flex布局在手机uc浏览器中一塌糊涂?
  6. 奇虎360开源其日志搜索引擎,可处理百万亿级的数据
  7. OpenCore引导配置说明第三版
  8. 人文社科开放数据库汇总
  9. 计算机产业现状及未来,2020工业计算机行业现状及未来前景分析
  10. [论文写作笔记] C9 概括和结论展示科学严谨性
  11. Jetson Nano 2G 使用HDMI连接电视机没有声音的问题
  12. 作为一个前端,你们的焦虑是什么?如何克服呢?
  13. PowerDesigner Excel导入信息
  14. “无法访问此网站”的一些原因
  15. 0x00B22E97 处有未经处理的异常(在 Project3.exe 中): 0xC00000FD: Stack overflow
  16. 腾讯员工绩效被打2星,情绪接近崩溃!大厂“内卷”太凶残......
  17. 高校图书馆管理系统 php 漏洞,某通用图书馆管理系统SQL注入_MySQL
  18. win10开机网络图标消失,可以联网重启资源管理器可以出来下次开机又不出现图标,是什么问题该怎么解决
  19. 欧盟剔除英国、瑞士和以色列开展量子计算遭声讨,科学无国界成伪命题
  20. 高效软件开发团队的特征

热门文章

  1. bzoj4443:[Scoi2015]小凸玩矩阵
  2. 创建一个简单的 MDM server(1)
  3. Git 初始化版本库
  4. 昨天帮同学的学校写了首校歌
  5. Test of etco
  6. 中文(英译) 爱情一句话哲理
  7. cprintdialog预览_怎样用CPrintDialog来实现打印功能
  8. html5标签属性大全_HTML5中video标签如何使用
  9. Java IO - Reader
  10. 总结mysql的基础语法_mysql 基础sql语法总结 (二)DML