zoukankan      html  css  js  c++  java
  • 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

     对于每一个城市只有去过和没去过两种状态,用一个二进制数s来表示
     f[s][i]当前在第i个城市,状态为s时的最小花费,&运算有0落0,所以s&1<<(j-1)保证了
     i城市的s状态 |运算有1落1 这样便可以找到一个从j到i的状态,用于更新答案

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 using namespace std;
     5 int mp[20][20];
     6 int f[70010][20];
     7 int n,ans = 1e9;
     8 void floyd()
     9 {
    10     for (int k=1; k<=n; ++k)
    11         for (int i=1; i<=n; ++i)
    12             for (int j=1; j<=n; ++j)
    13                 if (i!=j&&k!=i)
    14                     mp[i][j] = min(mp[i][j],mp[i][k]+mp[k][j]);
    15 }
    16 void dp()
    17 {
    18     memset(f,0x3f,sizeof(f));
    19     f[1][1] = 0;
    20     for (int s=0; s<=(1<<n)-1; s++)
    21         for (int i=1; i<=n; i++)
    22         {
    23             for (int j=1; j<=n; j++)
    24                 if (s&1<<(j-1)&&i!=j)
    25                     f[s|(1<<i-1)][i] = min(f[s|(1<<i-1)][i],f[s][j]+mp[j][i]);
    26         }
    27     for(int i=2; i<=n; i++) 
    28         ans = min(ans,f[(1<<n)-1][i]+mp[i][1]);
    29 }
    30 int main()
    31 {
    32     scanf("%d",&n);
    33     for (int i=1; i<=n; ++i)
    34         for (int j=1; j<=n; ++j)
    35             scanf("%d",&mp[i][j]);
    36     floyd();
    37     dp();
    38     printf("%d",ans);
    39     return 0;
    40 }
  • 相关阅读:
    高并发核心技术
    2年java,蚂蚁一面,卒
    Spring Boot 实战 入门
    spring-boot-plus后台快速开发脚手架之代码生成器使用
    spring-boot-plus后台快速开发框架1.0.0.RELEASE发布了
    spring-boot-plus后台快速开发框架1.0.0.RELEASE发布了
    Spring Boot项目使用maven-assembly-plugin根据不同环境打包成tar.gz或者zip
    从尾到头打印单向链表
    单向链表操作
    合并两个排序的数组
  • 原文地址:https://www.cnblogs.com/mjtcn/p/7028456.html
Copyright © 2011-2022 走看看