zoukankan      html  css  js  c++  java
  • [NOIP2017]宝藏

    看到这个数据范围——比暴力搜索稍微大一点的,果断是状压DP啦!
    听说prim最小生成树有40分?听说模拟退火可以A??
    qwq大佬说这个题暴力搜索也能过掉的啦!
    但是蒟蒻只会写70分暴力???
    先放上70分暴力的代码。。。就是枚举下一个拓展哪个点,然后枚举和哪个上面的前继点连线。

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #define MAXN 30
    using namespace std;
    int n,m,edge_number,ans=2147483647,tot;
    int done[MAXN],dist[MAXN][MAXN],sum[MAXN];
    inline void search(int now,int cnt,int val)
    {
    	if(val>ans) return;
    	if(cnt>=n) 
    	{
    		ans=min(ans,val);
    		return;
    	}
    	for(int i=1;i<=n;i++)
    	{
    		if(done[i]) continue;
    		for(int j=1;j<=n;j++)
    		{
    			if(j==i||!done[j]||dist[i][j]==0x3f3f3f3f) continue;
    			done[i]=1;
    			sum[i]=sum[j]+1;
    			search(i,cnt+1,val+dist[i][j]*sum[j]);
    			tot--;
    			sum[i]=0;
    			done[i]=0;
    		}
    	}
    }
    int main()
    {
    	scanf("%d%d",&n,&m);
    	memset(dist,0x3f,sizeof(dist));
    	for(int i=1;i<=m;i++)
    	{
    		int u,v,w;
    		scanf("%d%d%d",&u,&v,&w);
    		dist[u][v]=dist[v][u]=min(dist[u][v],w);
    	}
    	for(int i=1;i<=n;i++)
    	{
    		memset(done,0,sizeof(done));
    		for(int i=1;i<=n;i++) sum[i]=1;
    		done[i]=1;
    		search(i,1,0);
    	}
    	printf("%d
    ",ans);
    	return 0;
    }
    
  • 相关阅读:
    Java--分布式系统高并发解决方案
    Eclipse 快捷键
    Java--基础命名空间
    Java--发送邮件
    Java--垃圾收集算法及内存分配策略
    Java--Vector类
    第四篇 express 安装esasticsearch
    第三篇elasticsearch分布式安装
    第二篇elasticsearch配置
    elasticsearch介绍
  • 原文地址:https://www.cnblogs.com/fengxunling/p/9777606.html
Copyright © 2011-2022 走看看