zoukankan      html  css  js  c++  java
  • codevs2800送外卖(floyd+状压dp)

    2800 送外卖

     

     时间限制: 2 s
     空间限制: 256000 KB
     题目等级 : 钻石 Diamond
     
     
    题目描述 Description

    有一个送外卖的,他手上有n份订单,他要把n份东西,分别送达n个不同的客户的手上。n个不同的客户分别在1~n个编号的城市中。送外卖的从0号城市出发,然后n个城市都要走一次(一个城市可以走多次),最后还要回到0点(他的单位),请问最短时间是多少。现在已知任意两个城市的直接通路的时间。

    输入描述 Input Description

    第一行一个正整数n (1<=n<=15)

    接下来是一个(n+1)*(n+1)的矩阵,矩阵中的数均为不超过10000的正整数。矩阵的i行j列表示第i-1号城市和j-1号城市之间直接通路的时间。当然城市a到城市b的直接通路时间和城市b到城市a的直接通路时间不一定相同,也就是说道路都是单向的。

    输出描述 Output Description

    一个正整数表示最少花费的时间

    样例输入 Sample Input
    3
    0 1 10 10
    1 0 1 2
    10 1 0 10
    10 2 10 0
    样例输出 Sample Output

    8

    数据范围及提示 Data Size & Hint

    1<=n<=15

    /*
    floyd预处理+状压dp 
    */
    #include<cstdio>
    #include<cstring>
    #define maxn 40010
    
    using namespace std;
    
    int n,g[16][16],f[maxn][16],ans;
    
    int min(int x,int y){return x<y?x:y;}
    
    int main()
    {
        scanf("%d",&n);
        memset(f,127/3,sizeof(f));
        for(int i=0;i<=n;i++)
            for(int j=0;j<=n;j++)
                scanf("%d",&g[i][j]);
        for(int k=0;k<=n;k++)
            for(int i=0;i<=n;i++)
                for(int j=0;j<=n;j++)
                    g[i][j]=min(g[i][j],g[i][k]+g[k][j]);
    /*__________________________________________________________________________*/
    
        ans=f[0][0];f[0][0]=0;
        for(int i=1;i<(1<<n);i++)
            for(int j=1;j<=n;j++)if(i&(1<<j-1))
                for(int k=0;k<=n;k++)
                    f[i][j]=min(f[i][j],f[i-(1<<j-1)][k]+g[k][j]);
        for(int i=1;i<=n;i++)
            ans=min(ans,f[(1<<n)-1][i]+g[i][0]);
        printf("%d
    ",ans);
        return 0;
    }
    折花枝,恨花枝,准拟花开人共卮,开时人去时。 怕相思,已相思,轮到相思没处辞,眉间露一丝。
  • 相关阅读:
    React元素渲染
    初识JSX
    微信小程序复制文本到剪切板
    微信小程序报错request:fail url not in domain list
    小程序,通过自定义编译条件,模拟推荐人功能
    积分抵扣逻辑
    微信小程序 switch 样式
    tomcat 配置开启 APR 模式
    tomcat8 传输json 报错 Invalid character found in the request target. The valid characters are defined in RFC 3986
    c++数组初始化误区
  • 原文地址:https://www.cnblogs.com/L-Memory/p/7076135.html
Copyright © 2011-2022 走看看