P3959 宝藏
Posted sfwr-you
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P3959 宝藏相关的知识,希望对你有一定的参考价值。
————————————————————————————————————————————————————-
单论搜索来说本题有些虚高,但结合状压思想本来就是一个难点,而且构树上还有一个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 宝藏的主要内容,如果未能解决你的问题,请参考以下文章