zl程序教程

您现在的位置是:首页 >  硬件

当前栏目

【t062】最厉害的机器人

机器人 厉害
2023-09-14 09:03:48 时间

Time Limit: 1 second
Memory Limit: 128 MB

【问题描述】

【背景】 Wind设计了很多机器人。但是它们都认为自己是最强的,于是,一场比赛开始了~
【问题描述】
机器人们都想知道谁是最厉害的,于是它们进行如下一种比赛。每个机器人需要在最短的时间内找到自己面前的一个球,走到它
面前并绕过它,将球推进身后的球门。
首先Wind给了每个机器人一些钱,让他们去补充自己的装备,Wind给的钱恰好够补充k个装备。有如下几个装备可供补充:亮度传感
器,超声波测距,触动传感器,马达。(每种装备最多有10个)
而机器人找到球的时间=(20-亮度传感器*2)*x1,球离机器人的距离为(100-超声波测距*7)*x2,绕过球的距离为(100-触动传感器
*9)*x3,机器人的速度为(10+马达*1)*x4。换句话说,总共的时间为,找球的时间+走到球的时间+绕过球的时间+走回原地的时
间。机器人们要如何配置自己的装备才能达到最短的时间呢?
【时间限制】
每个测试点1s
【注释hint】
因为有了超声波,所以距离更加精确。
因为有了触动传感器,可以更精确的感觉到球。(有点牵强- -将就看吧。)
【输入格式】

每组测试数据只有1行5个数k,x1,x2,x3,x4 (0<=k<=40,1<=x1,x2,x3,x4<=10,且均为整数)。

【输出格式】

对每组数据输出1行为最短的时间,保留3位小数。

Sample Input

5 1 1 1 1

Sample Output

39.000

【题目链接】:http://noi.qz5z.com/viewtask.asp?id=t062

【题解】

枚举大法好。
直接四重循环每种装备有多少个就好;
那4种装备,每种增加都会减少时间.所以肯定是恰好为四种装备数总和为k的时候时间花得最少;
按照所给的公式计算时间.取最小值就好.

【完整代码】

#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
#define rep1(i,x,y) for (int i = x;i <= y;i++)

int k;
double x1,x2,x3,x4;
double ans = -1;

int main()
{
    //freopen("F:\\rush.txt","r",stdin);
    scanf("%d%lf%lf%lf%lf",&k,&x1,&x2,&x3,&x4);
    rep1(n1,0,10)
        rep1(n2,0,10)
            rep1(n3,0,10)
                rep1(n4,0,10)
                    {
                        if (n1+n2+n3+n4==k)
                        {
                            double temp = (20-2*n1)*x1*1.0;
                            temp+=((2*(100-n2*7)*x2+(100-n3*9)*x3)*1.0)/(1.0*((10+n4)*x4));
                            if (ans<0)
                                ans = temp;
                            else
                                ans = min(ans,temp);
                        }
                        else
                            if (n1+n2+n3+n4>k)
                                break;
                    }
    printf("%.3lf\n",ans);
    return 0;
}