zoukankan      html  css  js  c++  java
  • TSP变形(三进制状压)

    题目:HDU3001

    #include <bits/stdc++.h>
    using namespace std;
    int state[12],vis[60000][12],dis[12][12];
    int n,m,dp[60000][12];
    void init()//预处理三进制状态
    {
        state[1]=1;
        for(int i=2;i<=11;i++)    state[i]=state[i-1]*3;//最多10个点,要处理到11 
        for(int i=0;i<=state[11];i++)
        {
            int tmp=i;
            for(int j=1;j<=10;j++){// 把10位都处理一下 
                vis[i][j]=tmp%3;
                tmp/=3;
            }    
        }
    } 
    int main()
    {
        init();
        while(cin>>n>>m)
        {
            memset(dp,20,sizeof(dp));
            memset(dis,20,sizeof(dis));
            int inf=dp[0][0];
            for(int i=1;i<=n;i++)
                dp[state[i]][i]=0;
            for(int i=1;i<=m;i++)
            {
                int l,r,w;
                cin>>l>>r>>w;
                dis[l][r]=dis[r][l]=min(dis[l][r],w);    
            } 
            int ans=inf;
            for(int i=0;i<state[n+1];i++)//枚举状态
            {
                bool flag=1;
                for(int j=1;j<=n;j++)//枚举状态的每一位
                {
                    if(!vis[i][j])    flag=0;//本状态没有达成目的
                    if(dp[i][j]==inf)    continue;//没有前驱
                    for(int k=1;k<=n;k++)//枚举下一个节点
                    {
                        if(vis[i][k]>=2)    continue;
                        if(dis[j][k]==inf)    continue;//没有路
                        dp[i+state[k]][k]=min(dp[i+state[k]][k],dp[i][j]+dis[j][k]);    
                    }    
                }
                if(flag){
                    for(int j=1;j<=n;j++)    ans=min(ans,dp[i][j]);
                }    
            }
            if(ans==inf)    cout<<-1<<endl;
            else    cout<<ans<<endl; 
        }
    }

  • 相关阅读:
    xgzc— math 专题训练(一)
    floyd判圈算法
    CF961G Partitions
    luoguP4778 Counting swaps
    AT3913 XOR Tree(巧妙转换+状压dp)
    手动实现aop编程
    代理模式
    spring重点一:处理对象创建时间 个数以及方式
    spring helloword
    spring用来干什么,解决的问题
  • 原文地址:https://www.cnblogs.com/iss-ue/p/12506229.html
Copyright © 2011-2022 走看看