模拟考试9.3-笨笨的西瓜种植(watermelon.cpp)

这道题目描述了笨笨如何在一条直线上种植西瓜以最大化收获,同时尽量减少种植数量。笨笨得到了m个结论,每个结论指出特定范围内至少需要种植的西瓜数。给出n个西瓜地长度和m个结论,求最少需要种植多少西瓜。解题策略包括贪心算法和按右端点排序。注意区间查找和区间共享以减少种植数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

 所有测试点时限都是 1秒,所有程序运行时内存都不能超过 256MB。

在模拟考试其他题目中不再赘述。

【题目描述】

笨笨种了一块西瓜地,但这块西瓜地的种植范围是一条直线的…… 笨笨在一番研究过后,得出了m个结论,这m个结论可以使他收获的西瓜最多。 笨笨的结论是这样的: 从西瓜地B处到E处至少要种植T个西瓜,这个范围的收获就可以最大化。 笨笨不想那么辛苦,所以他想种植的西瓜尽量少,而又满足每一个所得的结论。

【输入】

第一行两个数n,m(0<n<=5000,0<=m<=3000),表示笨笨的西瓜地长n,笨笨得出m个结论。 

接下来m行表示笨笨的m个结论,每行三个数b,e,t(1<=b<=e<=n,0<=t<=e-b+1)

【输出】

 输出笨笨最少需种植多少西瓜。

【输入样例】

9 4
1 4 2
4 6 2
8 9 2
3 5 2

【输出样例】

5

 

【解题思路】

1、贪心

2、区间按照“右端点”进行排序

3、排序后,依次从每个区间的“左端点”开始查找,记录已经种植的西瓜数量;如果该区间种植的数量不足T个西瓜,就把“剩下”的西瓜种在区间的“最后”位置,使得后面区间能“共享”到这些西瓜,保证西瓜种植的数量尽量少。

 

我的想法与

def transition_operation_1(self): """过渡操作一""" rospy.loginfo("开始执行过渡操作一") # 重新起飞 if not self.takeoff(): return False # 向右2.8米 self.move_by_velocity(0, 2.8, 0) rospy.sleep(3) # 向下1.6米 self.move_by_velocity(0, 0, -1.6) rospy.sleep(3) # 根据上一次降落水果类型移动 if self.last_fruit_type == "apple": self.move_by_velocity(0.3, 0, 0) # 向前飞0.3米 elif self.last_fruit_type == "watermelon": self.move_by_velocity(-0.3, 0, 0) # 向后飞0.3米 elif self.last_fruit_type == "orange": self.move_by_velocity(1.8, 0, 0) # 向前飞1.8米 elif self.last_fruit_type == "banana": self.move_by_velocity(3.1, 0, 0) # 向前飞3.1米 rospy.sleep(3) # 执行云台校准 self.gimbal_calibration_right_task() # 等待10秒 rospy.sleep(10) rospy.loginfo("过渡操作一完成") def transition_operation_2(self): """过渡操作二""" rospy.loginfo("开始执行过渡操作二") # 重新起飞 if not self.takeoff(): return False # 向左0.7米 self.move_by_velocity(0, -0.7, 0) rospy.sleep(2) # 向下1.6米 self.move_by_velocity(0, 0, -1.6) rospy.sleep(3) # 根据上一次降落水果类型移动 if self.last_fruit_type == "apple": self.move_by_velocity(0.3, 0, 0) # 向前飞0.3米 elif self.last_fruit_type == "watermelon": self.move_by_velocity(-0.3, 0, 0) # 向后飞0.3米 elif self.last_fruit_type == "orange": self.move_by_velocity(1.8, 0, 0) # 向前飞1.8米 elif self.last_fruit_type == "banana": self.move_by_velocity(3.1, 0, 0) # 向前飞3.1米 rospy.sleep(3) # 执行云台校准 self.gimbal_calibration_right_task() # 等待5秒 rospy.sleep(5) rospy.loginfo("过渡操作二完成") ########################################################################################################################################################## # 最终降落 def run_land_mission(self): """执行降落任务""" rospy.loginfo("开始执行降落任务") # 控制云台向下90° self.control_gimbal(-90) rospy.sleep(2) # 启动视频流并微调位置 if self.start_video_stream(): while not rospy.is_shutdown(): if self.adjust_position_based_on_LandArea(): break rospy.sleep(0.1) self.stop_video_stream() # 在最终降落前向前飞行0.1米 rospy.loginfo("降落前向前微调0.1米") self.move_by_velocity(0.1, 0, 0, 1.0) rospy.sleep(1.5) # 最终降落 if not self.landing(): rospy.logerr("最终降落失败") return rospy.loginfo("降落任务完成") ########################################################################################################################################################## # 执行航线 def run_mission(self, line_names): """执行航线任务""" # 带重试的起飞功能 if not self.takeoff(): return # 执行航线任务 for i, line_name in enumerate(line_names): # 航线1系列任务 if line_name == "A1-1": self.line_A1_1() elif line_name == "A1-2": self.line_A1_2() elif line_name == "A1-3": self.line_A1_3() elif line_name == "A1-4": self.line_A1_4() elif line_name == "A1-5": self.line_A1_5() elif line_name == "A1-6": self.line_A1_6() elif line_name == "A1-7": self.line_A1_7() elif line_name == "A1-8": self.line_A1_8() # 航线2系列任务 elif line_name == "B2-1": self.line_B2_1() elif line_name == "B2-2": self.line_B2_2() elif line_name == "B2-3": self.line_B2_3() elif line_name == "B2-4": self.line_B2_4() elif line_name == "B2-5": self.line_B2_5() elif line_name == "B2-6": self.line_B2_6() elif line_name == "B2-7": self.line_B2_7() elif line_name == "B2-8": self.line_B2_8()当A区完成后执行过渡任务一,当B区任务完成后执行过渡任务二,最后执行降落任务
最新发布
08-02
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值