poj 2420 模拟退火法基础
/*
题意:给n个电脑,求一个点到这n个电脑的距离和最小。
模拟退火法:和poj1379的方法类似
因为坐标范围是0-10000
不妨把它看成是10000*10000的正方形来做
*/
#include<stdio.h>
#include<math.h>
#include<iostream>
#include<algorithm>
#define inf 10000000000000
using namespace std;
#define N 110
#define eps 0.1
#define pi acos(-1.0)
struct node {
double x,y,dis;
}f[N],ff[N];
int n;
double dd,x,y;
double diss(double x,double y) {
double sum=0;
int i;
for(i=1;i<=n;i++)
sum=sum+sqrt((x-f[i].x)*(x-f[i].x)+(y-f[i].y)*(y-f[i].y));
return sum;
}
void slove() {
int i,j;
double xx,yy;
for(i=1;i<=20;i++) {
ff[i].x=rand()%10000*1.0+1;
ff[i].y=rand()%10000*1.0+1;
ff[i].dis=diss(ff[i].x,ff[i].y);
}
double T=10000.0*sqrt(2.0);
double rate=0.9;
while(T>eps) {
for(i=1;i<=20;i++)
for(j=1;j<=30;j++) {
double ran=(rand()%1000+1)/1000.0*pi*10;
xx=ff[i].x+cos(ran)*T;
yy=ff[i].y+sin(ran)*T;
double dis=diss(xx,yy);
if(xx<0.0||xx>10000.0||yy<0.0||yy>10000.0)continue;
if(dis<ff[i].dis)
ff[i].dis=dis;
}
T*=rate;
}
dd=inf;
for(i=1;i<=20;i++){
if(dd>ff[i].dis)
dd=ff[i].dis;
}
return ;
}
int main() {
int i;
while(scanf("%d",&n)!=EOF) {
x=inf;
y=-1;
for(i=1;i<=n;i++)
scanf("%lf%lf",&f[i].x,&f[i].y);
slove();
printf("%.0f\n",dd);
}
return 0;
}
poj 2420 模拟退火法基础的更多相关文章
- poj 2420(模拟退火)
A Star not a Tree? Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6066 Accepted: 285 ...
- POJ 1379 模拟退火
模拟退火算法,很久之前就写过一篇文章了.双倍经验题(POJ 2420) 题意: 在一个矩形区域内,求一个点的距离到所有点的距离最短的那个,最大. 这个题意,很像二分定义,但是毫无思路,也不能暴力枚举, ...
- Python运维开发基础06-语法基础【转】
上节作业回顾 (讲解+温习120分钟) #!/usr/bin/env python3 # -*- coding:utf-8 -*- # author:Mr.chen # 添加商家入口和用户入口并实现物 ...
- Python运维开发基础05-语法基础【转】
上节作业回顾(讲解+温习90分钟) #!/usr/bin/env python # -*- coding:utf-8 -*- # author:Mr.chen import os,time Tag = ...
- Python运维开发基础04-语法基础【转】
上节作业回顾(讲解+温习90分钟) #!/usr/bin/env python3 # -*- coding:utf-8 -*- # author:Mr.chen # 仅用列表+循环实现“简单的购物车程 ...
- Python运维开发基础03-语法基础 【转】
上节作业回顾(讲解+温习60分钟) #!/usr/bin/env python3 # -*- coding:utf-8 -*- # author:Mr.chen #只用变量和字符串+循环实现“用户登陆 ...
- Python运维开发基础02-语法基础【转】
上节作业回顾(讲解+温习60分钟) #!/bin/bash #user login User="yunjisuan" Passwd="666666" User2 ...
- Python运维开发基础01-语法基础【转】
开篇导语 整个Python运维开发教学采用的是最新的3.5.2版,当遇到2.x和3.x版本的不同点时,会采取演示的方式,让同学们了解. 教学预计分为四大部分,Python开发基础,Python开发进阶 ...
- python3--算法基础:二维数组转90度
python3--算法基础:二维数组转90度 [0, 1, 2, 3][0, 1, 2, 3][0, 1, 2, 3][0, 1, 2, 3] 二维数组转90度 [0, 0, 0, 0][1, 1, ...
随机推荐
- bzoj 3156: 防御准备【斜率优化dp】
就是套路咯,设s[i]为1+2+...i 首先列出dp方程\( f[i]=min(f[j]+a[i]+(i-j)*i-(s[i]-s[j])) \) 然后推一推 \[ f[i]=f[j]+a[i]+( ...
- Akka源码分析-Akka-Streams-GraphStage
上一篇博客中我们介绍了ActorMaterializer的一小部分源码,其实分析的还是非常简单的,只是初窥了Materializer最基本的初始化过程及其涉及的基本概念.我们知道在materializ ...
- ACM_完全背包
背包3 Time Limit: 2000/1000ms (Java/Others) Problem Description: 有n种(每一种有无数个)重量和价值分别为Wi,Vi的物品,现从这些物品中挑 ...
- DHTML_____window对象属性
<html> <head> <meta charset="utf-8"> <title>window对象属性</title&g ...
- 初窥Android Studio
Android Studio 是一个Android集成开发工具,基于IntelliJ IDEA. 类似 Eclipse ADT,Android Studio 提供了集成的 Android 开发工具用于 ...
- js作用域、异步——学习笔记
所有的 for if switch while do 等等,都属于块级作用域,里面声明的对象,外面也能访问.但function 函数里的作用域,在函数外是访问不到的. 但函数作用域里面可以访问外面. ...
- Modbus通讯错误检测方法
标准的Modbus串行网络采用两种错误检测方法.奇偶校验对每个字符都可用,帧检测(LRC和CRC)应用于整个消息.它们都是在消息发送前由主设备产生的,从设备在接收过程中检测每个字符和整个消息帧. 用户 ...
- Redis远程连接
一.打开CMD命令 二.打开Redis客户端安装地址
- Asp.net MVC中文件上传的参数转对象的方法
参照博友的.NET WebApi上传文件接口(带其他参数)实现文件上传并带参数,当需要多个参数时,不想每次都通过HttpContext.Request.Params去取值,就针对HttpRequest ...
- Python批量下载电视剧电影--自己动手丰衣足食
前言 为了看美剧<天蝎>,在电影天堂找到了,于是就想下载下来好好欣赏. 废话不说了,直接上代码. 代码 import requests,re,os,time url = "htt ...