CodeVS1344 线型网络
有 N ( <=20 ) 台 PC 放在机房内,现在要求由你选定一台 PC,用共 N-1 条网线从这台机器开始一台接一台地依次连接他们,最后接到哪个以及连接的顺序也是由你选定的,为了节省材料,网线都拉直。求最少需要一次性购买多长的网 线。(说白了,就是找出 N 的一个排列 P1 P2 P3 ..PN 然后 P1 -> P2 -> P3 -> ... -> PN 找出 |P1P2|+|P2P3|+...+|PN-1PN| 长度的最小值)
第一行 N ,下面 N 行,每行分别为机器的坐标(x,y) ( 实数 -100<=x,y<=100 )
输出描述
Output Description
最小的长度,保留两位小数。
样例输入
Sample Input
3
0 0
1 1
1 -1
样例输出
Sample Output
2.83
正解:爬山算法。
首先这题很容易可以得到一个$O(2^{n}n^{2})$的状压$DP$的算法。然后就不会做了。。
然后这题可以写爬山算法。。我们打乱$[1,n]$的序列,然后$O(n^{2})$枚举每个$i$和$j$。
如果$dis(i-1,i)+dis(j,j+1)>dis(i-1,j)+dis(i,j+1)$,那么将$[i,j]$直接翻转一下,可以发现,这样做肯定会得到更优解。然后$rand$3000次,每次$O(n^{2})$算出最优解后取个$min$就行了。
//It is made by wfj_2048~
#include <algorithm>
#include <iostream>
#include <complex>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <vector>
#include <cmath>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <ctime>
#define inf (1e18)
#define eps (1e-9)
#define all (1<<n)
#define N (1<<20)
#define il inline
#define RG register
#define ll long long
#define lb(x) (x & -x)
#define File(s) freopen(s".in","r",stdin),freopen(s".out","w",stdout) using namespace std; double f[][N],dd[][],x[],y[],ans=inf;
int dex[],n; il int gi(){
RG int x=,q=; RG char ch=getchar(); while ((ch<'' || ch>'') && ch!='-') ch=getchar();
if (ch=='-') q=-,ch=getchar(); while (ch>='' && ch<='') x=x*+ch-,ch=getchar(); return q*x;
} il double dis(RG int i,RG int j){ return sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j])); } /*
il void work(){
cin>>n; for (RG int i=1;i<=n;++i) scanf("%lf%lf",&x[i],&y[i]);
for (RG int s=1;s<all;++s){
for (RG int i=1;i<=n;++i){
if (!(s&(1<<(i-1)))) continue;
for (RG int j=1;j<=n;++j){
if (s&(1<<(j-1))) continue;
RG int k=s|(1<<(j-1));
if (f[j][k]<eps) f[j][k]=inf;
f[j][k]=min(f[j][k],f[i][s]+dis(i,j));
}
}
}
for (RG int i=1;i<=n;++i) if (f[i][all-1]>eps) ans=min(ans,f[i][all-1]);
printf("%0.2lf",ans); return;
}
*/ il void sv(RG int a,RG int b){
for (RG int i=a,j=b;i<=j;++i,--j) swap(dex[i],dex[j]);
return;
} il double solve(){
for (RG int i=;i<=;++i){
RG int a=rand()%n+;
RG int b=rand()%n+;
swap(dex[a],dex[b]);
}
for (RG int i=;i<n;++i)
for (RG int j=i+;j<=n;++j)
if (dd[dex[i-]][dex[i]]+dd[dex[j]][dex[j+]]>dd[dex[i-]][dex[j]]+dd[dex[i]][dex[j+]]) sv(i,j);
RG double res=; for (RG int i=;i<n;++i) res+=dd[dex[i]][dex[i+]]; return res;
} il void work(){
cin>>n; for (RG int i=;i<=n;++i) scanf("%lf%lf",&x[i],&y[i]),dex[i]=i;
for (RG int i=;i<=n;++i)
for (RG int j=;j<=n;++j)
if (i!=j) dd[i][j]=dis(i,j);
for (RG int i=;i<=;++i){
RG double res=solve();
if (ans>res) ans=res;
}
printf("%0.2lf",ans); return;
} int main(){
File("linec");
srand(time(NULL));
work();
return ;
}
CodeVS1344 线型网络的更多相关文章
- NS3网络仿真(6): 总线型网络
快乐虾 http://blog.csdn.net/lights_joy/ 欢迎转载.但请保留作者信息 在NS3提供的第一个演示样例first.py中,模拟了一个点对点的网络,接下来的一个演示样例代码模 ...
- Cogs 6. 线型网络
6. 线型网络 ★★☆ 输入文件:linec.in 输出文件:linec.out 简单对比时间限制:1 s 内存限制:256 MB [问题描述] 有 N(N<=20)台 PC 放 ...
- CodeVS 1344 线型网络
Sol 随机化算法+哈密顿路径. 好厉害的题...首先都会想到状压DP对吧,复杂度 \(O(n^2 2^n)\) . \(n=20\) exm?? \(10^8\) 有一种算法就是随机化算法 再调整 ...
- cogs 线型网络(状压dp)
/* 需要好大的空间..... 而且lowbit理解的不是很好 先放到博客里 以后慢慢研究 */ #include<iostream> #include<cstdio> #in ...
- [Cogs] 线型网络
题面 http://cogs.pro:8080/cogs/problem/problem.php?pid=6 题解 https://www.zybuluo.com/wsndy-xx/note/1135 ...
- 前端学HTTP之网络基础
× 目录 [1]网络 [2]OSI [3]TCP/IP 前面的话 HTTP协议对于前端工程师是非常重要的.我们在浏览网站时,访问的每一个WEB页面都需要使用HTTP协议实现.如果不了解HTTP协议,就 ...
- Java基础之网络编程
网络编程:1.网络编程概述 (1)网络模型 OSI参考模型 TCP/IP参考模型 (2)网络通讯要素 IP地址 端口号 传输协议 (3)网络通讯前提: **找到对方IP **数据要发送到指定端口.为了 ...
- HCNA之网络通信基础
一.通信与网络 通信的概念我们并不陌生,在人类社会的起源和发展过程中,通信就直伴随着我们.般认为, 20世纪七.八十年代,人类社会已进入到信息时代,对于生活在信息时代的我们,通信的必要性和重要性更是不 ...
- NS3网络仿真(7): Wifi节点
快乐虾 http://blog.csdn.net/lights_joy/ 欢迎转载,但请保留作者信息 在上一节中.我们仿真了一个总线型网络,这一节尝试将上一节中的n0变成一个无线的AP.再连上几个节点 ...
随机推荐
- 安卓Android的内存管理原理解析
Android采取了一种有别于Linux的进程管理策略,有别于Linux的在进程活动停止后就结束该进程,Android把这些进程都保留在内存中,直到系统需要更多内存为止.这些保留在内存中的进程通常情况 ...
- 企业架构(TOGAF)学习
自从听了公司内部的一堂<企业架构设计>培训,顿时觉得如获至宝. 先说下笔者,笔者是一名二流本科毕业,工作三年,基层的软件开发工程师,梦想着有朝一日成长成一名架构师.可是笔者对于如何成长成一 ...
- JAVA基础知识(2)--堆栈和递归的操作
2015-07-26 18:16:21/***该应用程序对堆栈和递归方法进行实例操作: *1.堆栈操作:先进后出,*2.递归方法:直接或者调用自己的方法:*@author lhm *Email:912 ...
- iOS开发之UIApplication和delegate
1.概述 所有的移动操作系统都有个致命的缺点:app很容易受到打扰.比如一个来电或者锁屏会导致app进入后台甚至被终止. 还有很多其它类似的情况会导致app受到干扰,在app受到干扰时,会产生一些系统 ...
- Tcl与Design Compiler (三)——DC综合的流程
本文属于原创手打(有参考文献),如果有错,欢迎留言更正:此外,转载请标明出处 http://www.cnblogs.com/IClearner/ ,作者:IC_learner 1.基本流程概述 首先 ...
- underscore.js,js工具库
官方文档:http://underscorejs.org/ var totalCheckPriceVal = _.reduce(tableData[0],function(memo,num){ var ...
- NTP时间服务器
1. NTP简介 NTP(Network Time Protocol,网络时间协议)是用来使网络中的各个计算机时间同步的一种协议.它的用途是把计算机的时钟同步到世界协调时UTC,其精度在局域网内可达0 ...
- 【Egret】Native版本 视频播放器(android)
前段时间,领导说客户要一个平板版本的视频播放器,把我们做的一些视频资源放进去,要是本地的:我们部门又没有app开发程序员,正好又前段我在实验egret的app打包功能,就说用egret做(ps:本来想 ...
- CSS盒模型和文本溢出
CSS盒模型和文本溢出 学习目标 认识盒子模型 盒子模型的组成部分 学习盒子模型的相关元素margin padding 文本溢出相关的属性 一.认识盒子模型 盒模型是css布局的基石,它规定了网页元素 ...
- Shell括号之间的区别
前言 初次学习Shell,对于括号的使用肯定很困惑,所以我打算将其整理成一篇文章 单括号 { } 表达变量的值,在不引起歧义的时候可以省略大括号 例子: var=1 echo ${var} # 或者e ...