题目链接:点击查看

题目大意:给出一个 n * m 的二维平面,其中有 k 个纸片,给出第一个纸片的位置,要求从第一个纸片出发,经过每个纸片一次后再回到第一个纸片的位置,输出最短路径

题目分析:最短哈密顿路径的模板题,比赛的时候为什么没看出来呢。。好像是被 n * m 很小所迷惑了,感觉像是一道搜索题,但想了半天没什么思路就不想做了,赛后回顾一下的时候发现,k 给的特别小,最大只有 11 ,而且题目的条件又完全符合哈密顿路径的性质,只不过要求起点和终点重合,那么我们只需要最后对每个状态维护一下到起点的最小值就好了

代码:

#include<iostream>
#include<cstdio>
#include<string>
#include<ctime>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<stack>
#include<climits>
#include<queue>
#include<map>
#include<set>
#include<sstream>
using namespace std;typedef long long LL;typedef unsigned long long ull;const int inf=0x3f3f3f3f;const int N=1e5+100;struct Point
{int x,y;
}point[15];int d[15][15],dp[(1<<11)+100][15];int dis(int x,int y)
{return abs(point[x].x-point[y].x)+abs(point[x].y-point[y].y);
}int main()
{
#ifndef ONLINE_JUDGE
//    freopen("input.txt","r",stdin);
//    freopen("output.txt","w",stdout);
#endif
//  ios::sync_with_stdio(false);int w;cin>>w;while(w--){int n,m;scanf("%d%d",&n,&m);scanf("%d%d",&point[0].x,&point[0].y);int k;scanf("%d",&k);for(int i=1;i<=k;i++)scanf("%d%d",&point[i].x,&point[i].y);for(int i=0;i<=k;i++)for(int j=0;j<=k;j++)d[i][j]=dis(i,j);memset(dp,inf,sizeof(dp));dp[1][0]=0;for(int i=0;i<(1<<k+1);i++)for(int j=0;j<=k;j++){if(dp[i][j]==inf)continue;if((i>>j)&1){for(int t=0;t<=k;t++){if((i>>t)&1)continue;dp[i|(1<<t)][t]=min(dp[i|(1<<t)][t],dp[i][j]+d[j][t]);}}}int ans=inf;for(int i=0;i<=k;i++)ans=min(ans,dp[(1<<k+1)-1][i]+d[0][i]);printf("The shortest path has length %d\n",ans);}return 0;
}

牛客 - 收集纸片(最短哈密顿路径-状压dp)相关推荐

  1. 牛客练习赛$18E\ pocky$游戏 状压$dp$

    正解:状压$dp$ 解题报告: 传送门$QwQ$ 首先注意下题目,这个$a_i$不是个排列,,,我开始想了好久说这不是傻逼题直接做嘛然后一看样例发现我是傻逼$/dk$ 一个套路,看到绝对值问题一般就是 ...

  2. HDU - 3538 A sample Hamilton path(最短哈密顿路径+状压dp)

    题目链接:点击查看 题目大意:求从0开始的最短哈密顿路径,并且要求了某些点的先后顺序 题目分析:哈密顿路径:由指定的起点前往指定的终点,途中经过所有其他节点且只经过一次(百度百科) 既然按照一定的次序 ...

  3. Codeforces 1741G 最短路上状压dp

    题意: 有 n n n个地方,他们被 m m m条道路相连.有一天, t o t tot tot个人在 1 1 1处开派对,开完派对他们要回家,他们回家只会走最短路径,其中有 k ( k ≤ 6 ) ...

  4. CodeForces - 1102F Elongated Matrix(哈密顿路径+状压dp)

    题目链接:点击查看 题目大意:给出一个 n∗mn * mn∗m 的数字矩阵,现在可以对 行 进行重新排列,现在对排列后的矩阵按列展开成线性:s1,s2,-,snm=maze1,1,maze2,1,.. ...

  5. 牛客练习赛27 F-计数(状压+限制初末状态的矩阵快速幂)

    传送门 假如不是环,很简单 定义f[i][j]f[i][j]f[i][j]枚举到第iii个数字最后五个数字状态是jjj 那么显然可以矩阵快速幂求解 初始矩阵aaa是111行(1<<m)−1 ...

  6. HDU - 4856 Tunnels(哈密顿路径+状压dp)

    题目链接:点击查看 题目大意:给出一个n*n的正方形网格,其中"."表示可以走的路,"#"表示障碍物,每次可以向上下左右任意方向走1格,花费1单位时间,再给出m ...

  7. 【2019牛客暑期多校训练营(第五场)- E】independent set 1(最大独立集,状压dp)

    题干: 链接:https://ac.nowcoder.com/acm/contest/885/E 来源:牛客网 Note: For C++ languages, the memory limit is ...

  8. 牛客网 小白月赛4 D-郊区春游 最短路+状压dp

    链接: https://www.nowcoder.com/acm/contest/134/D来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524 ...

  9. 牛客推荐系统开发之选飞行棋子(状压dp)

    链接:登录-专业IT笔试面试备考平台_牛客网 牛客的新开发的推荐系统使得牛客的DAU(日活跃用户数量)上升了一个档次,于是牛客的老板组织了一场团建.在团建时,牛牛.牛妹.王清楚和茶山牛四人想要愉快地玩 ...

最新文章

  1. 如何在页面上实现一个圆形的可点击区域?
  2. python处理文本格式_python linecache 处理固定格式文本数据的方法
  3. Linux安装Redis服务
  4. PHP实现带重试功能的curl连接示例
  5. 每天一道LeetCode-----在字符方格中查找某个单词
  6. HDU-1016 Prime Ring Problem DFS
  7. HTML5 SVG
  8. tdms打开闪退问题
  9. Keras TensorFlow 混编中 trainable=False设置无效
  10. pycharm导入本地文件,程序运行正常,但导入模块时出现红色波浪线
  11. Qt5学习笔记之零碎问题记录
  12. 重要不紧急紧急不重要
  13. matlab求两向量夹角_MATLAB基础练习(一)
  14. MAE 自监督算法介绍和基于 EasyCV 的复现
  15. (十四)ATP应用测试平台——使用docker-compose一键式安装ATP应用测试平台的依赖服务
  16. (待补)(递归)九连环问题*
  17. python 简历处理_利用python处理简历和名单——处理excel os、shutil处理文件
  18. 看一眼就会马上收藏的宝藏设计网站
  19. 羽素携手维琪共展科研实力,造护肤“芯”产链
  20. 联合作战态势可视化决策系统

热门文章

  1. groovy附件存mysql_Groovy 操作mysql数据库
  2. Nacos-服务多级存储模型
  3. Spring中Bean的生命周期是怎样的?
  4. zookeeper的设计猜想-阶段一:提交事务请求(投票)
  5. Spring 框架中的单例Beans 是线程安全的么?
  6. ThreadLocal的第二种用法 part1
  7. 数据库-优化-为什么要进行数据库优化
  8. Filter_细节_web.xml配置方式
  9. Servlet_3.0注解配置
  10. Bootstrap组件_下拉菜单