一、题目
题目描述:
某组织举行会议,来了多个代表团同时到达,接待处只有一辆汽车,可以同时接待多个代表团,为了提高车辆利用率,请帮接待员计算可以坐满车的接待方案,输出方案数量。
约束:
1.一个团只能上一辆车,并且代表团人数(代表团数量小于30,每人代表团人数小于30)小于汽车容量(汽车容量小于100)
2.需要将车辆坐满
二、输入输出
输入描述:
第一行 代表团人数,英文逗号隔开,代表团数量小于30,每个代表团人数小于30
第二行 汽车载客量,汽车容量小于100
输出描述:坐满汽车的方案数量 如果无解输出0
三、示例
示例1:
输入:
5,4,2,3,2,4,910
输出:
4说明:以下几种方式都可以坐满车,[2,3 5]、[2,4,4]、[2,3,5]、[2,4,4]
四、要求
时间限制:C/C++ 1秒,其他语言 2秒
空间限制:C/C++262144K,其他语言524288K
64bit IO Format:%lld
五、解题思路
首先,我们需要将输入的代表团人数和汽车载客量进行解析,得到代表团人数列表和汽车载客量。
接下来,我们可以使用递归的方法来计算可以坐满汽车的接待方案数量。
在递归函数中,我们需要考虑两种情况:
当前代表团选择上车,递归处理剩余的代表团。
当前代表团选择不上车,递归处理剩余的代表团。
递归函数的终止条件是当汽车载客量为0时,即汽车已经坐满。
在递归过程中,我们需要记录每一种可行的方案数量,并将其累加。
最后,输出累加的方案数量即可。
六、参考代码
# -*- coding: utf-8 -*-
'''
@File : 2023-B-代表团坐车.py
@Time : 2023/12/23 21:09:04
@Author : mgc
@Version : 1.0
@Desc : None
'''def count_reception_plans(people, capacity):# 解析代表团人数列表people_list = [int(x) for x in people.split(",")]# 递归函数def helper(people_list, capacity):# 终止条件:汽车载客量为0,返回1表示找到一种可行方案if capacity == 0:return 1# 方案数量count = 0# 遍历代表团for i in range(len(people_list)):# 当前代表团人数curr_people = people_list[i]# 当前代表团人数小于等于汽车载客量时,进行递归处理if curr_people <= capacity:# 选择当前代表团上车,递归处理剩余的代表团count += helper(people_list[i+1:], capacity - curr_people)return count# 调用递归函数,得到方案数量plan_count = helper(people_list, capacity)return plan_countpeople = input() # 代表团人数列表
capacity = int(input()) # 汽车载客量
result = count_reception_plans(people, capacity)
print(result)