zoukankan      html  css  js  c++  java
  • poj3311 Hie with the Pie

    poj3311 Hie with the Pie

    题目描述

    共有n+1个点,问从点1出发走完所有点后回到1点所需要的最少时间

    输入输出格式

    输入格式:

    第一行行一个数,n

    接下来n+1行,每行n+1个数,表示从i到j的时间。

    输出格式:

    一个整数,表示最少时间。

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    int n,a[15][15],f[15][11000];
    int read()
    {
    	int n=0,f=1;char c=getchar();
    	while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
    	while(c>='0'&&c<='9'){n=n*10+c-'0';c=getchar();}
    	return n*f;
    }
    int main()
    {
    	while(1)
    	{
    		n=read();
    		if(n==0)break;
    		n++;
    		for(int i=1;i<=n;++i)
    			for(int j=1;j<=n;++j)
    				a[i][j]=read();
    		for(int k=1;k<=n;++k)
    			for(int i=1;i<=n;++i)
    				for(int j=1;j<=n;++j)
    					a[i][j]=min(a[i][j],a[i][k]+a[k][j]);
    		memset(f,0x3f,sizeof(f));
    		f[1][1]=0;
    		for(int i=1;i<(1<<n);++i)
    			for(int j=1;j<=n;++j)
    				if((i&(1<<(j-1)))!=0)
    					for(int k=1;k<=n;++k)
    						if((i&(1<<(k-1)))==0)f[k][i|(1<<(k-1))]=min(f[k][i|(1<<(k-1))],f[j][i]+a[j][k]);
    		int ans=0x3f3f3f3f;
    		for(int i=2;i<=n;++i)
    			ans=min(ans,f[i][(1<<n)-1]+a[i][1]);
    		printf("%d
    ",ans);
    	}
    	return 0;
    }
    
    
  • 相关阅读:
    单例模式
    二、CSS
    十一、多线程
    十二、协程
    十、多进程
    九、内存管理
    八、元类
    七、上下文管理器/魔术方法
    六、单例模式
    五、装饰器
  • 原文地址:https://www.cnblogs.com/axma/p/10076860.html
Copyright © 2011-2022 走看看