称号: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) //Ϊ0
continue;
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;
}

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

BestCoder Round #14 B 称号 Harry And Dig Machine 【TSP】的更多相关文章

  1. BestCoder Round #14

    Harry And Physical Teacher Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Ja ...

  2. hdu 5066 Harry And Physical Teacher(Bestcoder Round #14)

    Harry And Physical Teacher Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Ja ...

  3. hdu5067Harry And Dig Machine(TSP旅行商问题)

    题目链接: huangjing 题意:给出一幅图.图中有一些点,然后从第1个点出发,然后途径全部有石头的点.最后回到原点,然后求最小距离.当初作比赛的时候不知道这就是旅行商经典问题.回来学了一下. 思 ...

  4. TSP+Floyd BestCoder Round #52 (div.2) 1002 Victor and Machine

    题目传送门 题意:有中文版的 分析:(出题人的解题报告)我们首先需要预处理出任意两个国家之间的最短距离,因为数据范围很小,所以直接用Floyd就行了.之后,我们用f[S][i]表示访问国家的情况为S, ...

  5. 构造 BestCoder Round #52 (div.2) 1001 Victor and Machine

    题目传送门 题意:有中文版的 分析:首先要知道机器关闭后,w是清零的.所以一次(x + y)的循环弹出的小球个数是固定的,为x / w + 1,那么在边界时讨论一下就行了 收获:这种题目不难,理解清楚 ...

  6. BestCoder Round #11 (Div. 2) 题解

    HDOJ5054 Alice and Bob Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/O ...

  7. 简单几何(水)BestCoder Round #50 (div.2) 1002 Run

    题目传送门 /* 好吧,我不是地球人,这题只要判断正方形就行了,正三角形和正五边形和正六边形都不可能(点是整数). 但是,如果不是整数,那么该怎么做呢?是否就此开启计算几何专题了呢 */ /***** ...

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

    题目链接:pid=5228">ZCC loves straight flush pid=5228">题面: pid=5228"> ZCC loves s ...

  9. BestCoder Round #89 02单调队列优化dp

    1.BestCoder Round #89 2.总结:4个题,只能做A.B,全都靠hack上分.. 01  HDU 5944   水 1.题意:一个字符串,求有多少组字符y,r,x的下标能组成等比数列 ...

随机推荐

  1. Android应用程序安装过程源代码分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6766010 Android系统在启动的过程中, ...

  2. 内外连接、组函数、DDL、DML和TCL

    前言 cross join ,是笛卡尔积:nature join 是自然连接. 正文 内外连接 inner join inner join 的inner能够省略. 内连接 在一个表中可以找到在还有一个 ...

  3. [汇编学习笔记][第十三章int指令]

    第十三章int指令 13.1 int指令 格式: int n, n 为中断类型码 可以用int指令调用任何一个中断的中断处理程序(简称中断例程). 13.4 BIOS和DOS 所提供的中断例程 BIO ...

  4. CPU性能测试

    用计算圆周率的办法来测试cpu性能 4*a(1) 是 bc 主動提供的一個計算 pi 的函數,至於 scale 就是要 bc 計算幾個小數點下位數的意思.當 scale 的數值越大, 代表 pi 要被 ...

  5. 要将程序集“xxx.dll”标记为系统必备组件,必须对其进行强签名

    最近编译经常偶尔出现标题这个错误,有时重启电脑,就正常了,有时重启也不行,真蛋疼,后来发现把dll预先拷贝到生成目录,也可以避免这个编译错误,但是实在是麻烦,再去Google了半天,终于找到了解决方案 ...

  6. 关于降低android手机摄像头预览分辨率

    假设现在有这样一个需求需要一直开着手机摄像头 但是不做任何拍照动作 但是每个手机的相机分辨率都不同 而默认预览的时候参数是最大分辨率 这样有时候就回导致电量损耗的加快 所以我们可以采取降低相机分辨率的 ...

  7. VS 2003 无法打开Web项目,位于服务器“http:10.45.4.70:8080”上的项目不存在

    解决方法: 用记事本打开*.sln文件更改第2行 改成正确的虚拟目录 出现这种情况往往是从一台机器搬到另一台机器造成的虚拟路径名字不同

  8. CentOS 安装redis2.8.13 提醒"libc.so.6: version `GLIBC_2.14' not found"系统的glibc版本太低

    以下在系统CentOS 6.3 x86_64上操作 1.试图运行程序,提示"libc.so.6: version `GLIBC_2.14' not found",原因是系统的gli ...

  9. full-background.js

    $(window).on('load', function () { $(window).trigger('resize'); }); $(function () { var $window = $( ...

  10. grep;egrep;fgrep

    -1 使用场景:搜索定位内容并输出(所在行) -2 三者区别: --1 grep  默认支持普通正则 --2 egrep 默认支持扩展正则 等同于 grep -E --3 fgrep 速度最快,不支持 ...