zoukankan      html  css  js  c++  java
  • hdu 4563

    hdu 4563

    • 把每个命令走的距离抽象成完全背包
    • 枚举最后一个不是整点走完的命令
    #include <iostream>
    #include <algorithm>
    #include <cstring>
    #include <cstdio>
    #include <string>
    #include <set>
    #include <queue>
    
    using namespace std;
    
    typedef long long LL;
    const double N = -1e9;
    
    double DP[105];
    int xx[105],yy[105];
    
    double cal(double t,int v)
    {
        return -9.8*t*t/2.0+v*t;
    }
    
    double check(int x,int n,int L)
    {
        for(int i = 0; i <= 100; i++)
            DP[i] = N;
        DP[0] = 0;
        for(int i = 0; i < n; i++) //选第几个命令
        {
            if(i == x) continue;
            for(int j = L; j >= 0; j--) //到距离j
            {
                for(int k = 0; k <= L/xx[i]; k++) //命令i走k秒
                {
                    if(j >= k*xx[i])
                    {
                        DP[j] = max(DP[j],DP[j-k*xx[i]]+cal(k,yy[i]));
                    }
                }
            }
        }
        double ans = N;
        for(int i = 0; i <= L; i++)
        {
            ans = max(ans,DP[i]+cal(1.0*(L-i)/xx[x],yy[x])); //枚举最后一个命令是从哪个
        }
        return ans;
    }
    
    
    void solve(int cnt)
    {
        int nn,L;
    
        scanf("%d %d",&nn,&L);
        for(int i = 0; i < nn; i++)
        {
            scanf("%d %d",&xx[i],&yy[i]);
        }
        double ans = N;
        for(int i = 0; i < nn; i++)
        {
            ans = max(ans,check(i,nn,L)); //枚举最后一个命令是哪个,因为只有最后一个命令不是整点到达
        }
        printf("Case %d: %.3f
    ",cnt,ans);
    }
    
    int main(void)
    {
        int t,cnt = 1;
        scanf("%d",&t);
        while(t--)
        solve(cnt++);
        return 0;
    }
    
  • 相关阅读:
    qt 计时器自动刷新图片
    qt读取文本
    QLable 显示图片
    QButtonGroup 的使用
    Qt乱码的问题
    wpf 依赖强制回调
    实现Button的动态响应
    C# 闭包对像
    2020新年目标
    捕获、冒泡与阻止事件传播
  • 原文地址:https://www.cnblogs.com/henserlinda/p/6691957.html
Copyright © 2011-2022 走看看