刚开始做的时候还以为是暴搜,YY了各种剪枝,结果华丽丽的TLE了
正解:
状态压缩DP  
dp[当前走到的点][状态] 
状态: 第i位表示第i个点有没有被消灭
转移: 详见代码
注意: 计算转移cost时要用O(1) 的算法 二分会TLE
代码:
#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相关推荐

  1. hdu 4717 The Moving Points(三分+计算几何)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4717 说明下为啥满足三分: 设y=f(x) (x>0)表示任意两个点的距离随时间x的增长,距离y ...

  2. hdu 1050 Moving Tables

    Moving Tables Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Font: ...

  3. hdu 1050 Moving Tables

    http://acm.hdu.edu.cn/showproblem.php?pid=1050 对与每个房间前面过道,操作一次标记一次,标记的最多的次数就是必须用的时间. 1 #include < ...

  4. The Moving Points

    hdu4717:http://acm.hdu.edu.cn/showproblem.php?pid=4717 题意:给你n个点的坐标,然后每个点都有一个速度,求在什么时刻任意两个点的最大距离最小,以及 ...

  5. CodeForces - 1311F Moving Points(线段树+离散化)

    题目链接:点击查看 题目大意:给出 x 轴上的 n 个点,每个点都有一个位置和一个速度,每个点会根据速度在 x 轴上移动,现在规定dis( x , y )为点 x 和点 y 在移动过程中的最小距离,我 ...

  6. Actions as Moving Points复现

    寒假期间,研读了王立民老师的论文,决定去复现其文章中的代码:https://github.com/MCG-NJU/MOC-Detector.由于自己的显卡太过于垃圾,因此我将代码git到了学校的集群环 ...

  7. Actions as Moving Points

    论文下载地址:https://arxiv.org/abs/2001.04608 代码地址:https://github.com/mcg2019/MOC-Detector 论文创新点:当前存在的动作识别 ...

  8. 杭电OJ分类题目(3)

    原题出处:HDOJ Problem Index by Type,http://acm.hdu.edu.cn/typeclass.php 杭电OJ分类题目(3) HDU Computational Ge ...

  9. [搜索算法]三分搜索初步

    前言 对于单调函数,如果找到了其单调性,我们就可以使用二分的方法对其进行搜索.所以二分搜索的首要前提是具有单调性.当搜索的函数不具有单调性时,二分搜索就显得相形见绌了.所以对于较为复杂的函数,我们可以 ...

  10. 第六周 8.23-8.29

    8.23 POJ 3311 Hie with the Pie TSP问题. 先跑一遍Floyd.再状压dp. dp[i][j]表示经过集合i的点最后到达j的最短距离. 转移:取集合i中任意一点j.如果 ...

最新文章

  1. Fiddler 自定义规则编写
  2. C++如何监听http请求
  3. 正则至少一个数字_好程序员web前端培训分享JavaScript学习笔记之正则
  4. Phaserjs V2的state状态解析及技巧
  5. 互联网账户系统如何设计
  6. kafka grpc_模型服务:流处理与使用Java,gRPC,Apache Kafka,TensorFlow的RPC / REST
  7. python自加1_使用Python如何让里面的某个参数每调用一次程序就自加1
  8. 重新认识:指向函数的指针
  9. 计算机网络第二章填空题库英文,计算机网络英文题库(附答案)chapter3计算机网络英文题库(附答案)chapter3.doc...
  10. 航班可售舱位及机票价格查询api实例
  11. RoadRunner软件初步使用教程
  12. 采集商标网的10个经典方法
  13. 手机投屏不是全屏怎么办_一招搞定手机投屏不是全屏问题,手机投屏自适应全屏...
  14. html 按钮id,获取当前按钮或者html的ID名称
  15. 云计算在教育方面的应用
  16. Ceilometer Distributed Alarm
  17. wxh play 组织结构图
  18. logrotate实现日志切割和清理(清晰易懂)
  19. SQLPLUS ed无法调出编辑面板 SP2-0107:无须保存
  20. 一文回顾AI绘画的成长之路:从简笔画到真实人脸生成

热门文章

  1. 常见股票涨跌预警事件
  2. elasticsearch搜索报错ElasticsearchException: failed to map source
  3. 常见的文件名后缀及用法
  4. Gmail使用POP3设置的奥秘
  5. Python 五角星的画法 five star
  6. GitLab版本升级
  7. android 对焦,Android相机对焦模式
  8. SNIP——“自适应”型“狙击”策略 (目标检测)(two-stage)(深度学习)(CVPR 2018)
  9. 三大微分中值定理和洛必达法则、泰勒公式
  10. Google 阅读器键盘快捷键