• 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 }
  • 相关阅读:
    SQL 游标示例
    在与SQL Server 建立 连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器
    Jquery 设置焦点
    MVC Hidden用法
    Jquery根据name取得所有选中的Checkbox值
    MVC程序部署后页面指向login.aspx
    ref 和out 关键字
    认识关系型数据库
    抽象类和接口详解
    1.穷举法
  • 原文地址:https://www.cnblogs.com/mjtcn/p/6724079.html
Copyright © 2020-2023  润新知