• 2596 售货员的难题


    2596 售货员的难题

     

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

    某乡有n个村庄(1<n<=15),有一个售货员,他要到各个村庄去售货,各村庄之间的路程s(0<s<1000)是已知的,且A村到B村与B村到A村的路大多不同。为了提高效率,他从商店出发到每个村庄一次,然后返回商店所在的村,假设商店所在的村庄为1,他不知道选择什么样的路线才能使所走的路程最短。请你帮他选择一条最短的路。

    输入描述 Input Description

    村庄数n和各村之间的路程(均是整数)

    输出描述 Output Description

    最短的路程

    样例输入 Sample Input

    3

    0 2 1

    1 0 2

    2 1 0

    样例输出 Sample Output

    3

    数据范围及提示 Data Size & Hint

    本题可用最短路思想、搜索来解决,但是可能无法通过一组极限数据(且效率较低)。建议按树状DP考虑!

     1 #include<cstdio>    
     2 #include<cstring>
     3 using namespace std;
     4 #define N 51 
     5 int n,map[N][N],m=0x7fffffff;
     6 bool vis[N];
     7 void dfs(int p,int d,int s){      
     8     if(d==n)
     9     {
    10         if(s+map[p][1]<m)m=s+map[p][1];
    11         return;    
    12     }    
    13     for(int r=1;r<=n;r++)
    14     {    
    15         if(!vis[r]&&map[p][r]>0)
    16         {  
    17             if(s+map[p][r]>=m)break;         
    18             vis[r]=1;
    19             dfs(r,d+1,s+map[p][r]);    
    20             vis[r]=0;
    21         }    
    22     }        
    23 }    
    24 int main(){
    25     scanf("%d",&n);    
    26     for(int i=1;i<=n;i++)    
    27         for(int j=1;j<=n;j++)    
    28             scanf("%d",&map[i][j]);
    29     vis[1]=1;
    30     dfs(1,1,0);
    31     printf("%d",m);
    32     return 0;
    33 }
  • 相关阅读:
    thinkphp6 模型中时间戳报错
    php获取真实的ip信息
    java 获取字符串长度
    thinkphp6 linux首次部署Access denied
    mysql5.7 分配子账户和解决进程错误
    springboot controller引用请求体和返回体方法
    微信公众号token 验证
    springboot常量定义
    python 抓接口 利用requests 增加 headers示例
    asp.net web api 如何设置允许后台跨域访问
  • 原文地址:https://www.cnblogs.com/mjtcn/p/6724079.html
Copyright © 2020-2023  润新知