称号:Harry And Dig Machine

哈哈  最终涨边粉色了,不easy呀。顺便写一道题解吧

题意:给一个m*n的矩阵,然后当中最多由10个有值,求总左上角把全部的值都拿上回到左上角的最小步数。

标准的TSP回到原点问题,须要先预处理出图来。然后TSP就可以。

AC代码:

#include <cstdio>
#include <algorithm>
#include <cstring>
#include <string>
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
const int inf = 0x3f3f3f3f;
const int N = 15;
int mp[N][N];
struct Node
{int x,y;
};
vector<Node> vv;
int n,m;
int dp[1<<N][N];
int main()
{while(~scanf("%d%d",&n,&m)){for(int i=0;i<n;i++){for(int j=0;j<m;j++){int x;scanf("%d",&x);if(x)vv.push_back((Node){i,j});}}int okk = 0;for(int i=0;i<vv.size();i++){if(vv[i].x==0 && vv[i].y==0){okk=1;continue;}}if(okk==0)vv.push_back((Node){0,0});for(int i=0;i<vv.size();i++){for(int j=0;j<vv.size();j++){mp[i][j] = 0;if(i==j)continue;mp[i][j] = abs(vv[i].x-vv[j].x) + abs(vv[i].y-vv[j].y);}}int len = vv.size();n = len;for(int st=0;st<(1<<n);st++)  //TSP{for(int i=0;i<n;i++){if((st&(1<<i))==0)  //Ϊ0continue;if(st==(1<<i)){dp[st][i]=mp[0][i];continue;}dp[st][i]=inf;for(int j=0;j<n;j++){if((st&(1<<j)) && i!=j)//Ϊ1{dp[st][i]=min(dp[st&~(1<<i)][j]+mp[j][i],dp[st][i]);}}}}int ans=inf;for(int i=0;i<n;i++){ans=min(ans,dp[(1<<n)-1][i]+mp[i][0]);}printf("%d\n",ans);vv.clear();}return 0;
}

版权声明:本文博主原创文章。博客,未经同意不得转载。

转载于:https://www.cnblogs.com/hrhguanli/p/4842121.html

BestCoder Round #14 B 称号 Harry And Dig Machine 【TSP】相关推荐

  1. 矩阵快速幂---BestCoder Round#8 1002

    当要求递推数列的第n项且n很大时,怎么快速求得第n项呢? 可以用矩阵快速幂来加速计算. 我们可以用矩阵来表示数列递推公式 比如fibonacci数列 可以表示为 [f(n)   f(n-1)] = [ ...

  2. 贪心/二分查找 BestCoder Round #43 1002 pog loves szh II

    题目传送门 1 /* 2 贪心/二分查找:首先对ai%=p,然后sort,这样的话就有序能使用二分查找.贪心的思想是每次找到一个aj使得和为p-1(如果有的话) 3 当然有可能两个数和超过p,那么an ...

  3. 贪心 BestCoder Round #39 1001 Delete

    题目传送门 1 /* 2 贪心水题:找出出现次数>1的次数和res,如果要减去的比res小,那么总的不同的数字tot不会少: 3 否则再在tot里减去多余的即为答案 4 用set容器也可以做,思 ...

  4. HDU 5228 ZCC loves straight flush( BestCoder Round #41)

    题目链接:ZCC loves straight flush 题面: ZCC loves straight flush Time Limit: 2000/1000 MS (Java/Others)    ...

  5. 字符串处理 BestCoder Round #43 1001 pog loves szh I

    题目传送门 1 /* 2 字符串处理:是一道水题,但是WA了3次,要注意是没有加'\0'的字符串不要用%s输出,否则在多组测试时输出多余的字符 3 */ 4 #include <cstdio&g ...

  6. hdu4585 amp; BestCoder Round #1 项目管理(vector应用)

    主题链接:http://acm.hdu.edu.cn/showproblem.php?pid=4858 项目管理 Time Limit: 2000/1000 MS (Java/Others)    M ...

  7. hdu4932 Miaomiao#39;s Geometry (BestCoder Round #4 枚举)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4932 Miaomiao's Geometry Time Limit: 2000/1000 MS (Ja ...

  8. Codeforces Global Round 14 F. Phoenix and Earthquake 思维 + 并查集

    传送门 文章目录 题意: 思路: 题意: 给你nnn个点,mmm条边,限制xxx,每个点都有沥青aia_iai​,定义合并两个点即两点之间有边且au+av≥xa_u+a_v\ge xau​+av​≥x ...

  9. BestCoder Round #90 Kblack loves flag

     BestCoder Round #90 Kblack loves flag 问题描述 kblack喜欢旗帜(flag),他的口袋里有无穷无尽的旗帜. 某天,kblack得到了一个n∗mn*mn∗ ...

最新文章

  1. Electron的代码调试
  2. 拿高薪的程序员,都学习了什么编程语言?
  3. [新手学3D]Width 和 Pitch(Direct3D 9)
  4. Arduino可穿戴教程之第一个程序——连接硬件选择板子(二)
  5. document的createElement方法创建具有指定标签的DOM对象
  6. sql自动生成工具_可自动生成代码,5款基于AI的开发工具
  7. Hyperledger Fabric 1.4 Kafka集群部署教程
  8. 一步一步asp.net_页面静态化管理
  9. python3的3D实战 -基于panda3d(4)
  10. VMware16教程:配置同一局域网内的主机能够访问其他主机中的虚拟机(以squid代理上网服务为例)
  11. 修改MOSS2007内容查询部件实现自定义格式显示
  12. discuz php源码,Discuz7 php源码,该如何解决
  13. 敏捷开发“松结对编程”实践之三:共同估算篇(大型研发团队,学习型团队,139团队,师徒制度,敏捷设计,估算扑克,扑克牌估算)...
  14. matlab 命令集结(1)
  15. python exec函数 自动代码规范_Python 开发编码规范
  16. matlab 程序篇(1/3)
  17. 003-电脑软件系统保护
  18. 廉租房租赁合同范本(通用模板)
  19. 软件测试 (4)Linux命令
  20. 关闭 Windows 安全中心警报 及 用户账户允许此应用对你的设备进行更改 通知 及 打开文件 - 安全警告 通知

热门文章

  1. nodejs mysql 同步_NodeJS实现同步的方法
  2. c++用数组初始化向量_用C ++初始化向量
  3. mongodb 批量插入_MongoDB批量插入– MongoDB插入很多
  4. 如何成为Java开发工程师?
  5. 找工作?最容易遇到的Java面试题
  6. react-native开发安卓app相关使用总结
  7. SQL Server 修改表
  8. Firefly是什么?有什么特点?
  9. Android-第三天
  10. 2008R2 RDS架构