HDU 4234 Moving Points
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <math.h>
using namespace std;
#define for if(0); else for
const double PI=acos(-1.0);
struct Point{
double x,y,vx,vy,t;
Point(){}
Point(double x,double y){
this->x=x;
this->y=y;
}
Point(double x,double y,double d,double v){
this->x=x;
this->y=y;
this->vx=v*cos(d*PI/180.0);
this->vy=v*sin(d*PI/180.0);
this->t=0;
}
Point go(double t) const{
Point ret=*this;
ret.x+=vx*t;
ret.y+=vy*t;
return ret;
}
};
int n;
Point p[16];
double spd;
double dp[16][1<<15];
bool vis[16][1<<15];
double dis(const Point &a,const Point &b){
double dx=a.x-b.x;
double dy=a.y-b.y;
return sqrt(dx*dx+dy*dy);
}
double cost(const Point &a,const Point &b){
Point ta=Point(b.x-a.x,b.y-a.y);
Point v=Point(b.vx,b.vy);
double V=dis(v,Point(0,0));
double D=dis(ta,Point(0,0));
double A=V*V-spd*spd;
double C=D*D;
double B=-2.0*(ta.x*v.x+ta.y*v.y);
return (B-sqrt(B*B-4*A*C))/2.0/A;
}
int main() {
setbuf(stdout,NULL);
while(scanf("%d%lf",&n,&spd) &&(n!=0&&spd!=0)){
p[0]=Point(0,0,0,0);
for(int i=1;i<=n;i++){
double x,y,d,v;
scanf("%lf%lf%lf%lf",&x,&y,&d,&v);
p[i]=Point(x,y,d,v);
}
memset(vis,0,sizeof(vis));
vis[0][0]=1;
for(int stat=1;stat<1<<n;stat++){
for(int i=1;i<=n;i++){
int prev=stat;
prev &= ~ ( 1<< (i-1) );
if(prev==stat) continue;
for(int j=0;j<=n;j++) if(j!=i){
if(vis[j][prev]){
double val=dp[j][prev]+cost(p[j].go(dp[j][prev]),p[i].go(dp[j][prev]));
if(!vis[i][stat]) vis[i][stat]=1,dp[i][stat]=val;
else dp[i][stat]=min(dp[i][stat],val);
}
}
}
}
double ans=dp[1][(1<<n)-1];
for(int i=1;i<=n;i++) ans=min(ans,dp[i][(1<<n)-1]);
printf("%.2lf\n",ans);
}
return 0;
}
转载于:https://www.cnblogs.com/programCaiCai/archive/2012/08/13/HDU4324.html
HDU 4234 Moving Points相关推荐
- hdu 4717 The Moving Points(三分+计算几何)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4717 说明下为啥满足三分: 设y=f(x) (x>0)表示任意两个点的距离随时间x的增长,距离y ...
- hdu 1050 Moving Tables
Moving Tables Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Font: ...
- hdu 1050 Moving Tables
http://acm.hdu.edu.cn/showproblem.php?pid=1050 对与每个房间前面过道,操作一次标记一次,标记的最多的次数就是必须用的时间. 1 #include < ...
- The Moving Points
hdu4717:http://acm.hdu.edu.cn/showproblem.php?pid=4717 题意:给你n个点的坐标,然后每个点都有一个速度,求在什么时刻任意两个点的最大距离最小,以及 ...
- CodeForces - 1311F Moving Points(线段树+离散化)
题目链接:点击查看 题目大意:给出 x 轴上的 n 个点,每个点都有一个位置和一个速度,每个点会根据速度在 x 轴上移动,现在规定dis( x , y )为点 x 和点 y 在移动过程中的最小距离,我 ...
- Actions as Moving Points复现
寒假期间,研读了王立民老师的论文,决定去复现其文章中的代码:https://github.com/MCG-NJU/MOC-Detector.由于自己的显卡太过于垃圾,因此我将代码git到了学校的集群环 ...
- Actions as Moving Points
论文下载地址:https://arxiv.org/abs/2001.04608 代码地址:https://github.com/mcg2019/MOC-Detector 论文创新点:当前存在的动作识别 ...
- 杭电OJ分类题目(3)
原题出处:HDOJ Problem Index by Type,http://acm.hdu.edu.cn/typeclass.php 杭电OJ分类题目(3) HDU Computational Ge ...
- [搜索算法]三分搜索初步
前言 对于单调函数,如果找到了其单调性,我们就可以使用二分的方法对其进行搜索.所以二分搜索的首要前提是具有单调性.当搜索的函数不具有单调性时,二分搜索就显得相形见绌了.所以对于较为复杂的函数,我们可以 ...
- 第六周 8.23-8.29
8.23 POJ 3311 Hie with the Pie TSP问题. 先跑一遍Floyd.再状压dp. dp[i][j]表示经过集合i的点最后到达j的最短距离. 转移:取集合i中任意一点j.如果 ...
最新文章
- Fiddler 自定义规则编写
- C++如何监听http请求
- 正则至少一个数字_好程序员web前端培训分享JavaScript学习笔记之正则
- Phaserjs V2的state状态解析及技巧
- 互联网账户系统如何设计
- kafka grpc_模型服务:流处理与使用Java,gRPC,Apache Kafka,TensorFlow的RPC / REST
- python自加1_使用Python如何让里面的某个参数每调用一次程序就自加1
- 重新认识:指向函数的指针
- 计算机网络第二章填空题库英文,计算机网络英文题库(附答案)chapter3计算机网络英文题库(附答案)chapter3.doc...
- 航班可售舱位及机票价格查询api实例
- RoadRunner软件初步使用教程
- 采集商标网的10个经典方法
- 手机投屏不是全屏怎么办_一招搞定手机投屏不是全屏问题,手机投屏自适应全屏...
- html 按钮id,获取当前按钮或者html的ID名称
- 云计算在教育方面的应用
- Ceilometer Distributed Alarm
- wxh play 组织结构图
- logrotate实现日志切割和清理(清晰易懂)
- SQLPLUS ed无法调出编辑面板 SP2-0107:无须保存
- 一文回顾AI绘画的成长之路:从简笔画到真实人脸生成
热门文章
- 常见股票涨跌预警事件
- elasticsearch搜索报错ElasticsearchException: failed to map source
- 常见的文件名后缀及用法
- Gmail使用POP3设置的奥秘
- Python 五角星的画法 five star
- GitLab版本升级
- android 对焦,Android相机对焦模式
- SNIP——“自适应”型“狙击”策略 (目标检测)(two-stage)(深度学习)(CVPR 2018)
- 三大微分中值定理和洛必达法则、泰勒公式
- Google 阅读器键盘快捷键