⼤⾬过后,⼭上落下的⽯头堵塞了公路。⼤⼒⼠⼩A去帮忙疏通道路。已知⼩A能拖动总重量不超过200公⽄的⽯头,所有⽯头的重量保存在列表"⽯头重量"中,求⼩A最多能拖动多少块⽯头?

注意:此题不能使⽤“停⽌全部脚本”“停⽌这个脚本”和“停⽌该⾓⾊的其他脚本”积⽊!

【输⼊格式】

“输⼊”列表,表⽰⽯头们的重量。

【输出格式】

⼩A最多能拖动的⽯头块数

【输⼊样例1】

NOC青少儿编程大赛/信息素养大赛编程题解析-背包问题之搬运石头

【输出样例1】

7

说明:最多能拖⾛11+15+23+27+32+33+42这7块⽯头,它们重量之和为183公⽄。如果再多加⼀块⽯头,总重是(237)就超过能拖动的上限200公⽄了。


分析:

我们需要从给定的石头重量列表中,选择尽可能多的石头,使得这些石头的总重量不超过200公斤。这是一个典型的“背包问题”的变种。为了最大化石头的数量,我们应该优先选择重量较小的石头。这样可以在有限的重量限制下,尽可能多地选择石头。因此,可以按照以下步骤进行:

1、将石头重量列表按从小到大的顺序排序。

2、从最小的石头开始,依次累加石头的重量,直到总重量不超过200公斤。

3、记录能够选择的石头数量。


实现步骤:

第一步:创建列表,通过重复执行,输入若干(例如:10个)石块的重量。

NOC青少儿编程大赛/信息素养大赛编程题解析-背包问题之搬运石头

NOC青少儿编程大赛/信息素养大赛编程题解析-背包问题之搬运石头

NOC青少儿编程大赛/信息素养大赛编程题解析-背包问题之搬运石头

第二步:使用排序算法,将列表中的数从小到大排列。

下面以冒泡排序进行操作,新建三个变量i,j用于遍历,temp用于交换列表中两个数使用的临时变量。(冒泡排序算法详见:5分钟理解冒泡排序算法,并用scratch实现

NOC青少儿编程大赛/信息素养大赛编程题解析-背包问题之搬运石头

NOC青少儿编程大赛/信息素养大赛编程题解析-背包问题之搬运石头

第三步:从最小的石头开始,依次累加石头的重量,直到总重量不超过200公斤。

新建变量:k、个数(记录石头数量)、总重量、flag(题目要求不能使⽤“停⽌全部脚本”“停⽌这个脚本”和“停⽌该⾓⾊的其他脚本”积⽊)用于标记是否超出重量,如果超过重量结束循环。

NOC青少儿编程大赛/信息素养大赛编程题解析-背包问题之搬运石头

NOC青少儿编程大赛/信息素养大赛编程题解析-背包问题之搬运石头

完整程序下载:背包问题-搬运石头.sb3

本站内容未经许可,禁止任何网站及个人进行转载。