【t062】最厉害的机器人

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;
}
上一篇:docker常用命令


下一篇:进来看看,有你想要的