设为首页 加入收藏

TOP

HDU 3001 Travelling (三进制状态压缩 DP)
2015-07-20 17:55:13 】 浏览:5616
Tags:HDU 3001 Travelling 进制 状态 压缩



题意:有 n 个city,可以选择任一城市作为起点,每个城市不能访问超过2次,


城市之间有权值,问访问全部n个城市需要的最小权值。



思路:因为每个城市可以访问最多两次,所以用三进制表示访问的状态。


详细见代码注释!!!!



#include
  
   
#include
   
     #include
    
      #include
     
       #include
       #include
       
         #include
        
          #include 
         
           #include 
          
            #include
           
             #include
            
              using namespace std; #define INF 1e8 #define inf 0x3f3f3f3f #define eps 1e-8 #define LL long long #define N 100001 #define mol 100000000 int dp[60000][15];//dp[i][j] 表示在状态 i 的情况访问到 j 的最小值 int g[15][15]; int n,m; int st[60000][11];//dp[i][j] i 状态的第 j 个城市可以访问几次 int bit[12];//初始所有可能状态 int main() { bit[0]=0;bit[1]=1; for(int i=2;i<=11;i++) bit[i]=3*bit[i-1]; for(int i=0;i<59050;i++) { int t=i; for(int j=1;j<=10&&t;j++) { st[i][j]=t%3; t/=3; } } while(~scanf("%d%d",&n,&m)) { int u,v,c; memset(dp,0x3f,sizeof(dp)); memset(g,0x3f,sizeof(g)); for(int i=0;i<=n;i++) dp[bit[i]][i]=0;//初始起点 为0 while(m--) { scanf("%d%d%d",&u,&v,&c); if(c
             
              


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇uva 11330 - Andy's Shoes(置.. 下一篇HDOJ 4259 Double Dealing

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目