zoukankan      html  css  js  c++  java
  • 集训作业 洛谷P1433 吃奶酪

    嗯?这题竟然是个绿题。

    这个题真的不难,不要被他的难度吓到,我们只是不会计算2点之间的距离,他还给出了公式,这个就有点……

    我们直接套公式去求出需要的值,然后普通的搜索就可以了。

    这个题我用的深搜,因为广搜没什么意义。

    #include<iostream>
    #include<string>
    #include<algorithm>
    #include<cmath>
    #include<cstdio>
    struct z
    {
    	double x,y;
    }g[20];
    using namespace std;
    double s[20][20];
    int n,bj[20];
    double maxx=9999999.0;
    int dfs(int bs,int xz,double jl)//3个参数分别是吃了几个奶酪,现在在第几个奶酪的位置和一共走了多远。 
    {
    	if(jl>=maxx)//现在比最远的一次都远了,再走会更远。 
    	{
    		return maxx;
    	}
    	if(bs==n)//全都吃完了,比较一下哪个大,返回 
    	{
    		maxx=min(maxx,jl);
    		return maxx;
    	}
    	for(int i=1;i<=n;i++)
    	{
    		if(bj[i]==0)//bj表示这个奶酪吃过没有 
    		{
    			bj[i]=1;//现在吃过了 
    			dfs(bs+1,i,jl+s[xz][i]);//下一层循环。 
    			bj[i]=0;//这次吃它的情况全试过了,试试这次不吃。 
    		}
    	}
    }
    int main()
    {
    	cin>>n;
    	for(int i=1;i<=n;i++)//正常的输入 
    	{
    		cin>>g[i].x>>g[i].y;
    	}
    	g[0].x=0;
    	g[0].y=0; 
    	for(int i=0;i<=n;i++)
    	{
    		for(int j=0;j<=n;j++)//s[i][j]的意思是第i块奶酪到第j块奶酪的距离 
    		{
    			s[i][j]=sqrt((g[i].x-g[j].x)*(g[i].x-g[j].x)+(g[i].y-g[j].y)*(g[i].y-g[j].y));//公式套上。 
    		}
    	}
    	dfs(0,0,0.0);//开始搜索 
    	printf("%.2f",maxx);//保留2位小数。%.2f 
    	return 0;
    } 

    这个题没什么可讲的,一个纯洁的深搜就可以解决了。

  • 相关阅读:
    hadoop用到的shell脚本
    hadoop搭建完全分布式集群
    hadoop搭建伪分布式集群
    ARM Compute Library编译安装
    OpenBlas交叉编译安装
    正则表达式去除所有标签html标签
    xstream实现xml字符串与对象直接的转换
    spring-boot中使用mybatis-plus代码生成器让你轻松的完成单表的CURD
    开源、免费软件和网站分享
    2020春软件工程助教工作期末总结
  • 原文地址:https://www.cnblogs.com/lichangjian/p/12888345.html
Copyright © 2011-2022 走看看