设为首页 加入收藏

TOP

HDU 3001 Travelling 状压DP
2015-07-20 17:49:40 来源: 作者: 【 】 浏览:7
Tags:HDU 3001 Travelling 状压

?

题意:还是环游地图的问题,只不过这回旅行者对自己有着严格的要求,地图上每个点的经过次数不能超过两次。

思路:依然是状压DP问题,根上一道很像,只不过这次对于每个点来说有三种状态,分别是未经过,经过一次,经过两次。所以要用三进制的数来进行状态压缩,这个关键点想明白了其他的和上一道基本一样了。对于我来说需要注意的是:能够到达某一个点经过了两次的状态的前一个状态是这个点已经经过了一次的状态,而不是从来未经过这个点的状态。

代码:

?

#include 
  
   
#include 
   
     #include 
    
      #include 
     
       #include 
      
        #include 
       
         #include 
        
          #include 
         
           #include
           #include 
           
             #include 
            
              #include 
             
               #include 
              
                #include 
               
                 #define eps 1e-8 #define INF (1<<30)-1 #define maxn 100005 #define PI acos(-1.0) #define seed 31//131,1313 typedef long long LL; typedef unsigned long long ULL; using namespace std; int Pow[15]; int cost[15][15]; int dp[59500][15]; void init() { for(int i=0; i<10; i++) { for(int j=0; j<59500; j++) dp[j][i]=INF; } Pow[0]=1; dp[Pow[0]][0]=0; for(int i=1; i<=10; i++) { Pow[i]=Pow[i-1]*3; dp[Pow[i]][i]=0; } for(int i=0; i<10; i++) for(int j=0; j<10; j++) cost[i][j]=INF; return ; } int main() { int n,m,k,pos; LL ans; while(~scanf(%d%d,&n,&m)) { init(); ans=INF; for(int i=0; i
                
                 z) { cost[x-1][y-1]=z; cost[y-1][x-1]=z; } } for(int i=1; i
                 
                  

?

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C++并行编程2 下一篇排列数据的输出(二) 循环处理

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·哈希表 - 菜鸟教程 (2025-12-24 20:18:55)
·MySQL存储引擎InnoDB (2025-12-24 20:18:53)
·索引堆及其优化 - 菜 (2025-12-24 20:18:50)
·Shell 中各种括号的 (2025-12-24 19:50:39)
·Shell 变量 - 菜鸟教 (2025-12-24 19:50:37)