zoukankan      html  css  js  c++  java
  • poj 3311 Hie with the Pie

      题意:有n个城市和一个披萨店(0),给出一个(n+1)阶的矩阵,表示 i 到 j 的距离,每个点可走多次。求从披萨店出发,再回到披萨店,把每个城市走一遍要走的最近距离。

      状态DP,状态s二进制中第几位表示第几个城市走没走过的状态,0表示每走过,1表示走过。

      先用Floyd求任意两点之间的最近距离,然后状态s从0开始到 (1<<n)-1,求dp[s][i],dp[s][i]表示状态s时,走到城市 i 时的最近距离。最后再求 (dp[(1<<n)-1][i]+map[i][0])的最小值。

    #include<stdio.h>
    #include<string.h>
    #define min(a,b) (a)>(b)?(b):(a)
    
    const int inf = 99999999;
    int n;
    int map[15][15];
    int dp[1200][15];
    void Input()
    {
        for(int i=0;i<=n;i++)
            for(int j=0;j<=n;j++)
                scanf("%d",&map[i][j]);
    }
    void Floyd()
    {
        for(int k=0;k<=n;k++)
            for(int i=0;i<=n;i++)
                for(int j=0;j<=n;j++)
                    if(map[i][j]>map[i][k]+map[k][j])
                        map[i][j]=map[i][k]+map[k][j];
    }
    void Deal()
    {
        for(int s=0;s<(1<<n);s++)
        {
            for(int i=1;i<=n;i++)
            {
                if(s & (1<<(i-1)))
                {
                    if(s==(1<<(i-1))) dp[s][i]=map[0][i];
                    else
                    {
                        dp[s][i]=inf;
                        for(int j=1;j<=n;j++)
                            if(s & (1<<(j-1)) && j!=i)
                                dp[s][i]=min(dp[s][i],dp[s^(1<<(i-1))][j]+map[j][i]);
                    }
                }
            }
        }
        int ans;
        int stat=(1<<n)-1;
        ans=dp[stat][1]+map[1][0];
        for(int i=2;i<=n;i++)
            ans=min(ans,dp[stat][i]+map[i][0]);
        printf("%d
    ",ans);
    }
    int main()
    {
        while(scanf("%d",&n) && n)
        {
            memset(dp,0,sizeof(dp));
            Input();
            Floyd();
            Deal();
        }
        return 0;
    }
    View Code
  • 相关阅读:
    gulp 安装时一直提示缺少模块( Cannot find module 'gulp-load-plugins')
    webpack4.0入门以及使用
    重装系统(Win)
    单个雪碧图多个图像资源你该如何解决它们的定位?
    手机加载优化
    怎么下载google商店的扩展程序?
    ajax请求后台交互json示例
    scss
    Koala
    webpack-安装
  • 原文地址:https://www.cnblogs.com/yongren1zu/p/3265068.html
Copyright © 2011-2022 走看看