zoukankan      html  css  js  c++  java
  • Codevs 3122 奶牛代理商 VIII(状压DP)

    3122 奶牛代理商 VIII
    时间限制: 3 s
    空间限制: 256000 KB
    题目等级 : 大师 Master
    题目描述 Description
    小徐是USACO中国区的奶牛代理商,专门出售质优价廉的“FJ”牌奶牛。
    有一天,她的奶牛卖完了,她得去美国进货。
    她需要去N个奶牛农场询问价格(小徐是个认真的人,买东西一定要货比三家)。
    给你一个邻接矩阵,表示N个农场间的路径长度,求小徐最少走多少路。(从农场1出发,最后回到出发点买)
    输入描述 Input Description
    N
    邻接矩阵
    输出描述 Output Description
    答案(见描述)
    样例输入 Sample Input
    3
    0 1 2
    3 0 10
    2 0 0
    样例输出 Sample Output
    5
    数据范围及提示 Data Size & Hint
    N<=15,路径长度<=1000
    TSP
    分类标签 Tags
    动态规划 状态压缩型DP

    /*
    仍然是入门题.
    */
    #include<iostream>
    #include<cstring>
    #include<cstdio>
    #define MAXN 70001
    using namespace std;
    int f[MAXN][16],n,g[16][16],ans=1e9;
    void floyed()
    {
        for(int i=1;i<=n;i++)
          for(int j=1;j<=n;j++)
            for(int k=1;k<=n;k++)
              if(i!=j&&j!=k&&i!=k)
                g[i][j]=min(g[i][j],g[i][k]+g[k][j]);
    }
    void dp()
    {
        memset(f,127/3,sizeof f);
        f[1][1]=0;
        for(int s=0;s<=(1<<n)-1;s++)
          for(int i=1;i<=n;i++)
          {
            for(int j=1;j<=n;j++)
              if(s&1<<(j-1)&&i!=j)
                f[s|(1<<i-1)][i]=min(f[s|(1<<i-1)][i],f[s][j]+g[j][i]);
          }
        for(int i=2;i<=n;i++) ans=min(ans,f[(1<<n)-1][i]+g[i][1]);
    }
    int main()
    {
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
          for(int j=1;j<=n;j++)
            scanf("%d",&g[i][j]);
        floyed();dp();
        printf("%d",ans);
        return 0;
    }
    
  • 相关阅读:
    leetcode821
    leetcode872
    leetcode700
    leetcode806
    2019-9-2-win10-uwp-右击浮出窗在点击位置
    2019-9-2-win10-uwp-打包第三方字体到应用
    2019-10-18-dotnet-文件读写务必注意事项
    2018-8-10-win10-uwp-如何创建修改保存位图
    2018-8-9-win10-uwp-装机必备应用-含源代码
    2019-11-1-asp-dotnet-core-简单开发P2P中央服务器
  • 原文地址:https://www.cnblogs.com/nancheng58/p/10067993.html
Copyright © 2011-2022 走看看