hdu 5067 Harry And Dig Machine

Posted theroadtothegold

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hdu 5067 Harry And Dig Machine相关的知识,希望对你有一定的参考价值。

http://acm.hdu.edu.cn/showproblem.php?pid=5067

 

题意:

二维网格图中有若干块石头,从左上角出发,搬走所有石头,再回到左上角的最短距离

 

旅行商问题

参考上一篇博客

 

#include<cstdio>
#include<algorithm>
 
using namespace std;

#define N 11

int dp[1<<N][N]; 
int dis[N][N];

int stx[N],sty[N];

int main()
{
     int n,m,tot,x,S;
     while(scanf("%d%d",&n,&m)!=EOF)
     {
          tot=0;
          for(int i=1;i<=n;++i)
              for(int j=1;j<=m;++j)
              {
                  scanf("%d",&x);
                  if(x) stx[++tot]=i,sty[tot]=j;
              }
          for(int i=1;i<=tot;++i)
              for(int j=1;j<=tot;++j)
                  dis[i][j]=abs(stx[i]-stx[j])+abs(sty[i]-sty[j]);
          S=(1<<tot+1)-1;
          for(int i=1;i<=S;++i)
              for(int j=0;j<=tot;++j)
                  dp[i][j]=1e9;
          for(int i=1;i<=tot;++i) dp[0][i]=dis[0][i]=stx[i]-1+sty[i]-1;
         for(int i=1;i<S;++i)
             for(int j=0;j<=tot;++j)
                 if(!(i&1<<j))
                     for(int k=1;k<=tot;++k)
                         if(i&1<<k)
                             dp[i][j]=min(dp[i][j],dis[j][k]+dp[i^1<<k][k]);
         printf("%d
",dp[S-1][0]);
    }
}

 

以上是关于hdu 5067 Harry And Dig Machine的主要内容,如果未能解决你的问题,请参考以下文章

hdu5157 Harry and magic stringmanacher

hdu 5154 Harry and Magical Computer 拓扑排序

Harry Potter and the Hide Story(hdu3988)

HDU - 5157 :Harry and magic string (回文树)

HDU 5069 Harry And Biological Teacher(AC自动机+线段树)

Dijstra堆优化HDU 3986 Harry Potter and the Final Battle