码迷,mamicode.com
首页 > 其他好文 > 详细

P3959 宝藏

时间:2019-08-03 21:18:36      阅读:79      评论:0      收藏:0      [点我收藏+]

标签:bsp   using   main   names   搜索   void   bit   out   span   

技术图片

————————————————————————————————————————————————————-

单论搜索来说本题有些虚高,但结合状压思想本来就是一个难点,而且构树上还有一个dfs需要搞就更显得思维含量【误

写了一个状压搜索,自己还是太弱了,参考了别人的博客,要努力啊

————————————————————————————————————————————————————————

#include<bits/stdc++.h>
using namespace std;
int n,m,a,b,c,ans=0x3f3f3f3f,num[15][15],dp[(1<<12)+5],dis[30];
void dfs(int now)
{
    for(int i=1;i<=n;i++)
    if(now&(1<<i-1))
    for(int j=1;j<=n;j++)
    if(!(now&(1<<j-1))&&num[i][j]!=1061109567&&(dis[i]*num[i][j]+dp[now]<dp[now|(1<<j-1)]))
    {
        dis[j]=dis[i]+1;
        dp[now|(1<<j-1)]=dis[i]*num[i][j]+dp[now];
        dfs(now|(1<<j-1));
    }
}
int main()
{
    cin>>n>>m;
    memset(num,0x3f,sizeof(num));
    for(int i=1;i<=m;i++)
    {
        cin>>a>>b>>c;
        num[a][b]=num[b][a]=min(num[a][b],c);
    }
    for(int i=1;i<=n;i++)
    {    memset(dp,0x3f,sizeof(dp));
        memset(dis,0x3f,sizeof(dis));
        dp[1<<(i-1)]=0;
        dis[i]=1;
        dfs(1<<(i-1));
        ans=min(dp[(1<<n)-1],ans);
    }
    cout<<ans;
}

 

P3959 宝藏

标签:bsp   using   main   names   搜索   void   bit   out   span   

原文地址:https://www.cnblogs.com/SFWR-YOU/p/11296247.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!