zoukankan      html  css  js  c++  java
  • ACdream1092

    题意是给出某个地鼠的出现位置以及出现时间,人有一个移动速度,求此人最多可以打多少个地鼠?

    我们根据时间把所有的地鼠排序,如果两个地鼠之间的距离不超过时间只差与速度的乘积,那说明打完上一只地鼠还可以打到这一只地鼠。

    直接f[i]表示打完第i只地鼠且此时在i地鼠位置的期望,DP即可。

    召唤代码君:

    /*
    * this code is made by 092000
    * Problem: 1092
    * Verdict: Accepted
    * Submission Date: 2014-07-19 23:27:11
    * Time: 276MS
    * Memory: 1732KB
    */
    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <cmath>
    #include <algorithm>
    #define maxn 1010
    using namespace std;
     
    struct mouse{
        double x,y,t,p;
    }m[maxn];
     
    bool cmp(mouse m1,mouse m2)
    {
        return m1.t<m2.t;
    }
     
    int T,n,v;
    double ans,sum[maxn];
     
    double dis(int i,int j)
    {
        return sqrt((m[i].x-m[j].x)*(m[i].x-m[j].x)+(m[i].y-m[j].y)*(m[i].y-m[j].y));
    }
     
    int main()
    {
        sum[0]=m[0].x=m[0].y=m[0].t=0;
        scanf("%d",&T);
        while (T--)
        {
            ans=0;
            scanf("%d%d",&n,&v);
            for (int i=1; i<=n; i++)
                scanf("%lf%lf%lf%lf",&m[i].x,&m[i].y,&m[i].t,&m[i].p),sum[i]=0;
            sort(m+1,m+1+n,cmp);
            for (int i=1; i<=n; i++)
            {
                for (int j=0; j<i; j++)
                    if (dis(i,j)<=(m[i].t-m[j].t)*v) sum[i]=max(sum[i],sum[j]);
                ans=max(ans,sum[i]=sum[i]+m[i].p);
            }
            printf("%.6f
    ",ans);
        }
        return 0;
    }
    如有转载,请注明出处(http://www.cnblogs.com/lochan)
  • 相关阅读:
    死磕itchat源码--core.py
    死磕itchat源码--config.py
    死磕itchat源码--content.py
    死磕itchat源码--__init__.py
    SyntaxError Non-ASCII character 'xe5' in file
    死磕itchat源码--目录结构
    pip是用代理
    `itchat`配置代理
    搭建`wenblogic`执行`install`脚本失败
    sublimeText3的安装及插件的配置使用
  • 原文地址:https://www.cnblogs.com/lochan/p/3857512.html
Copyright © 2011-2022 走看看