BestCoder Round #14 B 題 Harry And Dig Machine 【TSP】,

來源:互聯網
上載者:User

BestCoder Round #14 B 題 Harry And Dig Machine 【TSP】,

題目:Harry And Dig Machine 


哈哈  終於漲邊粉色了,不容易呀。順便寫一道題解吧

題意:給一個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;}





聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.