登山机器人问题(本题满分40分)(福建04年省选题目)noip提高组难度

36 篇文章 0 订阅
7 篇文章 0 订阅
 

登山机器人问题(本题满分40分)(福建04年省选题目)noip提高组难度

?问题描述:

登山机器人是一个极富挑战性的高技术密集型科学研究项目。它涉及小车机械、飞行器控制、机器人学、机电一体化、单片机、数据融合、精密仪器、实时数字信号处理、图像处理与图像识别、知识工程与专家系统、决策、轨迹规划、自组织与自学习理论、多智能体协调、以及无线通讯等多项理论和技术,是一个典型的智能机器人系统。登山机器人为研究发展多智能体系统和多机器人之间的合作与对抗提供了生动的研究模型。

登山机器人可以携带有限的能量。在登山过程中,登山机器人需要消耗一定能量,并且可以在机器人之间通过接触传递能量。用多个登山机器人接力登山可以极大地提高登山机器人的攀登高度。

?编程任务:

给定n个登山机器人(1<n<100)。第i个登山机器人最多可以携带xi单位的能量,每攀高1米需要消耗能量yi单位。开始登山时n个登山机器人均处于同一水平高度0,并且每个登山机器人初始时都携带了最多的能量。计算用这n个登山机器人进行不返回的接力登山可攀登的最高的高度。

?数据输入:

输入数据由文件名为INPUT3.*的文本文件提供。

n 1行中的整数为登山机器人个数n

n 接下来的n行中每行一个整数,依次为x1,x2,x3,...,xn

n 最后的n行中每行一个整数,依次为y1,y2,y3,...,yn

?结果输出:

程序运行结束时,在屏幕上输出所找到的这n个登山机器人可攀登的最高的高度,精确到小数点后2位。

输入文件示例

输出示例

INPUT3.001

7500.00

50

50

0.01

0.01

 (这个地儿题目都说了保留两位,数据却没写上= =)

 题解:拿两个机器人的推广一下:

易想到尽量将燃料用完,尽量让耗油少的用,依此思路进行推导。

当有两个机器人时,临界条件就是2号剩余的油恰好能够把1号的油箱给装满

时,2号剩余的1号消耗的,此时可将2号的油传给1号,就又可上升x1/y1

假设x1/y1+x2/(y1+y2)>x2/y2+x1/(y1+1y2),化简后,可得到x1/y1^2>x2/y2^2

这样将所化简的关键字排序后,贪心选取即可得到最优值。

选取的方法为每次把x[i]/y[i]^2最小的数丢掉,因为已经排序,所以把它的油加到前面i-1个里面。像前面一样,在临界条件,得到一个恰好把剩下i-1个的油箱装满时上升的高度h,h:=x[i]/(y[1]+y[2]+...+y[i]);

ac程序:

var x,y:array[0..100] of real;
sum:real;
n,m,i,j,k:longint;
function f(i,j:longint):boolean;
begin
 if x[j]*y[i]*y[i]>x[i]*y[j]*y[j] then
 exit(true);
 exit(false);
end;
begin
 assign(input,'p3.in'); assign(output,'p3.out');
 reset(input); rewrite(output);
 readln(n);
 for i:=1 to n do
  readln(x[i]);
 for i:=1 to n do
  readln(y[i]);
 for i:=1 to n-1 do
  for j:=i+1 to n do
   if f(i,j) then
    begin
     sum:=x[i]; x[i]:=x[j]; x[j]:=sum;
     sum:=y[i]; y[i]:=y[j]; y[j]:=sum;
    end;
 for i:=2 to n do
  y[i]:=y[i-1]+y[i];
 sum:=0;
 for i:=1 to n do
  sum:=sum+x[i]/y[i];
 writeln(sum:0:2);
 close(input); close(output);
end.


 


 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值