Computer networking requires that the computers in the network be linked.
This problem considers a \linear" network in which the computers are chained together so that each
is connected to exactly two others except for the two computers on the ends of the chain which are
connected to only one other computer. A picture is shown below. Here the computers are the black
dots and their locations in the network are identi ed by planar coordinates (relative to a coordinate
system not shown in the picture).
Distances between linked computers in the network are shown in feet.
For various reasons it is desirable to minimize the length of cable used.
Your problem is to determine how the computers should be connected into such a chain to minimize
the total amount of cable needed. In the installation being constructed, the cabling will run beneath
the oor, so the amount of cable used to join 2 adjacent computers on the network will be equal to
the distance between the computers plus 16 additional feet of cable to connect from the oor to the
computers and provide some slack for ease of installation.
The picture below shows the optimal way of connecting the computers shown above, and the total
length of cable required for this con guration is (4+16)+ (5+16) + (5.83+16) + (11.18+16) = 90.01
feet.
Input
The input le will consist of a series of data sets. Each data set will begin with a line consisting of a
single number indicating the number of computers in a network. Each network has at least 2 and at
most 8 computers. A value of 0 for the number of computers indicates the end of input.
After the initial line in a data set specifying the number of computers in a network, each additional
line in the data set will give the coordinates of a computer in the network. These coordinates will be
integers in the range 0 to 150. No two computers are at identical locations and each computer will be
listed once.
Output
The output for each network should include a line which tells the number of the network (as determined
by its position in the input data), and one line for each length of cable to be cut to connect each adjacent
pair of computers in the network. The nal line should be a sentence indicating the total amount of
cable used.
In listing the lengths of cable to be cut, traverse the network from one end to the
other
. (It makes no difference at which end you start.) Use a format similar to the one shown in the
sample output, with a line of asterisks separating output for different networks and with distances in
feet printed to 2 decimal places.
SampleInput
6
5 19
55 28
38 101
28 62
111 84
43 116
5
11 27
84 99
142 81
88 30
95 38
3
132 73
49 86
72 111
0
SampleOutput
**********************************************************
Network #1
Cable requirement to connect (5,19) to (55,28) is 66.80 feet.
Cable requirement to connect (55,28) to (28,62) is 59.42 feet.
Cable requirement to connect (28,62) to (38,101) is 56.26 feet.
Cable requirement to connect (38,101) to (43,116) is 31.81 feet.
Cable requirement to connect (43,116) to (111,84) is 91.15 feet.
Number of feet of cable required is 305.45.
**********************************************************
Network #2
Cable requirement to connect (11,27) to (88,30) is 93.06 feet.
Cable requirement to connect (88,30) to (95,38) is 26.63 feet.
Cable requirement to connect (95,38) to (84,99) is 77.98 feet.
Cable requirement to connect (84,99) to (142,81) is 76.73 feet.
Number of feet of cable required is 274.40.
**********************************************************
Network #3
Cable requirement to connect (132,73) to (72,111) is 87.02 feet.
Cable requirement to connect (72,111) to (49,86) is 49.97 feet.
Number of feet of cable required is 136.99.

题目大意:给定一些电脑的笛卡尔平面直角坐标系坐标,求将这些电脑连成一条链的最小总距离(单位:ft),由于连线问题,每两台电脑之间的连接距离要多16 ft。

思路:全枚举暴搜。

可行性剪枝:当早已枚举完了n台电脑时,剪枝。

最优化剪枝:若当前的累计距离总和超过了已求出的最小距离总和,意味着再搜索也无法得出更优解,则剪枝。

#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int ans[8],dans[8],n;
bool vis[8];
struct node{int x,y;}a[8];
double dis[8][8],tot;
inline double cal(int i,int j)
{
return sqrt((a[i].x-a[j].x)*(a[i].x-a[j].x)+(a[i].y-a[j].y)*(a[i].y-a[j].y));
}
void dfs(int cur,double sum)
{
if(sum>=tot)return;
if(cur>=n){
tot=sum;
for(int i=0;i<n;i++)
ans[i]=dans[i];
}
for(int i=0;i<n;i++)
if(!vis[i]){
vis[i]=1;
dans[cur]=i;
double tmp=cur?dis[dans[cur-1]][i]:0;
dfs(cur+1,sum+tmp);
vis[i]=0;
}
}
void Init()
{
for(int i=0;i<n;i++)
scanf("%d%d",&a[i].x,&a[i].y);
for(int i=0;i<n;i++)
for(int j=i;j<n;j++)
dis[i][j]=dis[j][i]=cal(i,j)+16;
tot=(double)0x3f3f3f3f;
}
void out(int &T)
{
puts("**********************************************************");
printf("Network #%d\n",++T);
for(int i=1;i<n;i++){
int p=ans[i-1],q=ans[i];
printf("Cable requirement to connect (%d,%d) to (%d,%d) is %.2lf feet.\n",a[p].x,a[p].y,a[q].x,a[q].y,dis[p][q]);
}
printf("Number of feet of cable required is %.2lf.\n",tot);
}
int main()
{
int T=0;
while(scanf("%d",&n)&&n){
Init();
dfs(0,0);
out(T);
}
return 0;
}

//此程序是首次全程在ubuntu(of linux)环境下编写的,以示纪念;

uva216 Getting in Line的更多相关文章

  1. 备战NOIP每周写题记录(一)···不间断更新

    ※Recorded By ksq2013 //其实这段时间写的题远远大于这篇博文中的内容,只不过那些数以百记的基础题目实在没必要写在blog上; ※week one 2016.7.18 Monday ...

  2. ILJMALL project过程中遇到Fragment嵌套问题:IllegalArgumentException: Binary XML file line #23: Duplicate id

    出现场景:当点击"分类"再返回"首页"时,发生error退出   BUG描述:Caused by: java.lang.IllegalArgumentExcep ...

  3. Error on line -1 of document : Premature end of file. Nested exception: Premature end of file.

    启动tomcat, 出现, ( 之前都是好好的... ) [lk ] ERROR [08-12 15:10:02] [main] org.springframework.web.context.Con ...

  4. 关于xml加载提示: Error on line 1 of document : 前言中不允许有内容

    我是在java中做的相关测试, 首先粘贴下报错: 读取xml配置文件:xmls\property.xml org.dom4j.DocumentException: Error on line 1 of ...

  5. Eclipse "Unable to install breakpoint due to missing line number attributes..."

    Eclipse 无法找到 该 断点,原因是编译时,字节码改变了,导致eclipse无法读取对应的行了 1.ANT编译的class Eclipse不认,因为eclipse也会编译class.怎么让它们统 ...

  6. Linix登录报"/etc/profile: line 11: syntax error near unexpected token `$'{\r''"

    同事反馈他在一测试服务器(CentOS Linux release 7.2.1511)上修改了/etc/profile文件后,使用source命令不能生效,让我帮忙看看,结果使用SecureCRT一登 ...

  7. [LeetCode] Line Reflection 直线对称

    Given n points on a 2D plane, find if there is such a line parallel to y-axis that reflect the given ...

  8. [LeetCode] Tenth Line 第十行

    How would you print just the 10th line of a file? For example, assume that file.txt has the followin ...

  9. [LeetCode] Max Points on a Line 共线点个数

    Given n points on a 2D plane, find the maximum number of points that lie on the same straight line. ...

随机推荐

  1. javascript的浅拷贝和深拷贝

    1.浅拷贝:复制一份引用,所有引用对象都指向一份数据,并且都可以修改这份数据. 2.深拷贝(复杂):复制变量值,对于非基本类型的变量,则递归至基本类型变量后,再复制. 这里画一个简单的图来加深理解: ...

  2. .Net元编程【Metaprogramming in NET】 序-翻译

    最近在看这本书,比较实用.抽点时间把公开的部分内容简单的翻译了一下,下文是序部分. 书的具体地址为: http://www.amazon.cn/Metaprogramming-in-NET-Hazza ...

  3. 使用Javascript来编写贪食蛇(零基础)

      引用的东西都很基础,注释也很多,这里就不多说了. <head> <meta http-equiv="Content-Type" content="t ...

  4. 【读书笔记】iOS网络-Web Service协议与风格

    协议指的是在与其它系统交换结构化信息时所要遵循的一套格式,过程与规则.此外,协议定义了在传输过程中所要使用的数据格式.这样,接收系统就能正确地解释结构化信息并做出正应的回应. 1,简单对象访问协议. ...

  5. HtmlHelper用法大全

    HTML扩展类的所有方法都有2个参数: 以textbox为例子 public static string TextBox( this HtmlHelper htmlHelper, string nam ...

  6. Spring源码阅读:IOC容器的设计与实现(二)——ApplicationContext

    上一主题(查看)中,了解了IOC容器的基本概念,以及BeanFactory的设计与实现方式,这里就来了解一下ApplicationContext方式的实现. ApplicationContext 在S ...

  7. linux查看硬件常用命令

          最近整理了平时工作中经常使用的命令,主要分为两大块,一块是查看硬件信息的命令,另一块是监控硬件运转情况的命令.这一篇只涉及查看硬件信息的命令,有关监控硬件运转的命令,我会在下一篇博客中给大 ...

  8. lnmp之php5.3.27 编译信息

    ./configure \--prefix=/application/php5.3.27 --with-mysql=application/mysql \--with-iconv-dir=/usr/l ...

  9. mysql-mmm 安装配置(双主)

    原文地址:mysql-mmm 安装配置 作者:chinaunix1116 MMM即Master-Master Replication Managerfor MySQL(mysql主主复制管理器)关于m ...

  10. 使用dwr时动态生成table的一个小技巧

    这篇随笔是我在07年写的,因为当时用了自己建设的blog,后来停止使用了,今天看到备份数据库还在,恢复出来放到这里.留着记录用. 我在使用DWR时,试了很多次都无法在动态生成的table中的一个或多个 ...