POJ-2728-01分数规划,Dinkelbach迭代
来源:互联网 发布:python脚本写文件 编辑:程序博客网 时间:2024/06/03 22:56
题目大意:最优比例生成树,分子为两点间的垂直距离,分母为欧几米德距离;
题目解析:用迭代+prim,更新dist,dist为abs(ax-b.x)-ans*dist(a,b);(题目输出只能用f不能用lf)
AC代码:
#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<algorithm>#include<cmath>using namespace std;const int maxn=1010;struct node{ int x,y,z;}q[maxn];double dis(node a,node b){ return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));}int n;double dist[maxn];bool vis[maxn];int pre[maxn];double prime(double x){ memset(vis,0,sizeof(vis)); for(int i=2;i<=n;i++) { dist[i]=abs(q[i].z-q[1].z)-x*dis(q[i],q[1]); pre[i]=1; } vis[1]=1; dist[1]=0; pre[1]=1; double cost=0,length=0; for(int i=1;i<n;i++) { double mi=100000000; int u=-1; for(int j=1;j<=n;j++) { if(vis[j]) continue; if(mi>dist[j]) { u=j; mi=dist[j]; } } vis[u]=1; cost+=abs(q[pre[u]].z-q[u].z); length+=dis(q[pre[u]],q[u]); for(int j=1;j<=n;j++) { double temp=abs(q[u].z-q[j].z)-x*dis(q[j],q[u]); if(!vis[j]&&temp<dist[j]) { dist[j]=temp; pre[j]=u; } } } return cost/length;}int main(){ while(scanf("%d",&n)!=EOF&&n) { for(int i=1;i<=n;i++) { scanf("%d%d%d",&q[i].x,&q[i].y,&q[i].z); } double a=0,b; while(1) { b=prime(a); if(abs(a-b)<1e-4) break; a=b; } printf("%.3f\n",a); } return 0;}
0 0
- POJ-2728-01分数规划,Dinkelbach迭代
- poj 3111 K Best 【0-1分数规划】 【二分 or Dinkelbach迭代】
- poj Dropping tests 01分数规划---Dinkelbach算法
- poj Dropping tests 01分数规划---Dinkelbach算法
- poj 2976: Dropping tests(01分数规划--Dinkelbach算法)
- POJ 2976 Dropping tests 01分数规划Dinkelbach算法
- POJ 2976 Dropping tests 01分数规划 模板 二分&&Dinkelbach
- POJ 2976-Dropping tests(01分数规划_二分||Dinkelbach算法)
- 0 1分数规划的Dinkelbach算法...
- 0-1分数规划的Dinkelbach算法
- Poj 2976 Dropping tests(01分数规划 牛顿迭代)
- 01分数规划问题相关算法与题目讲解(二分法与Dinkelbach算法)
- 【POJ 2728】[01分数规划]Desert King
- poj 2728 Desert King 【最优比例生成树 0-1分数规划】 【二分 or 迭代 + MST】
- 对于0-1分数规划的Dinkelbach算法的分析
- 对于0-1分数规划的Dinkelbach算法…
- 对于0-1分数规划的Dinkelbach算法的分析
- 对于0-1分数规划的Dinkelbach算法的分析
- iOS 开发:绘制像素到屏幕
- Isomorphic Strings
- Multithreading in swing with SwingWorker
- kafka问题
- 洛谷 P1017 进制转换
- POJ-2728-01分数规划,Dinkelbach迭代
- 【java并发】基础(1)--创建线程的两种方法
- CentOS6.5下redis3.2.8的安装
- Java中日期和时间的处理原理解析
- python学习第四讲
- 欢迎使用CSDN-markdown编辑器
- 【Srm590】Fox And City(fox)
- string 详解
- A股-入门-选短线牛股的七大法则