问题描述
小U同学每天在早餐店有多种主食和饮料可以选择。给定两个数组,staples 表示不同主食的价格,drinks 表示不同饮料的价格。每天早上,小U最多会花费不超过 xx 元,他可能选择一份主食、一杯饮料,或只选择主食或饮料中的一个。你的任务是计算小U每天早上有多少种不同的选择,满足其最大花费不超过 xx。
例如:对于输入的主食价格 5 20 5 和饮料价格 5 5 2,如果小U的最大花费为 5,则一共有 5 种不同的选择。
测试样例
样例1:
输入:
staples = [5, 20, 5] ,drinks = [5, 5, 2] ,x = 5
输出:5
样例2:
输入:
staples = [3, 10, 7] ,drinks = [2, 5] ,x = 7
输出:5
样例3:
输入:
staples = [10, 15] ,drinks = [5, 6] ,x = 20
输出:7
问题理解
小U每天早上可以选择一份主食、一杯饮料,或者只选择主食或饮料中的一个。我们需要计算在不超过给定预算 x 的情况下,有多少种不同的选择。(我们可以分两类讨论一类都选,另一类只选择其中一种。)
思路分析
- 单独选择主食:遍历主食数组,统计价格不超过
x的主食数量。
for i in staples:
if i<=x:
sum1+=1
- 单独选择饮料:遍历饮料数组,统计价格不超过
x的饮料数量。
for i in drinks:
if i<=x:
sum2+=1
- 组合选择主食和饮料:遍历主食数组,对于每个主食,再遍历饮料数组,统计主食和饮料的总价格不超过
x的组合数量。
for i in staples:
for j in drinks:
if i+j<=x:
count+=1
- 合并所有选择:将单独选择主食、单独选择饮料和组合选择主食和饮料的数量相加,得到最终结果。
sum=count+sum1+sum2
python代码展示
def solution(staples: list, drinks: list, x: int) -> int:
count=0
sum1=0
sum2=0
for i in staples:
for j in drinks:
if i+j<=x:
count+=1
for i in staples:
if i<=x:
sum1+=1
for i in drinks:
if i<=x:
sum2+=1
sum=count+sum1+sum2
return sum
样例分析
样例:
输入:
staples = [5, 20, 5] ,drinks = [5, 5, 2] ,x = 5
输出:5
-
单独选择主食:
- 主食价格为
[5, 20, 5]。 - 在预算
x = 5的情况下,只有价格为5的主食可以选择。 - 因此,单独选择主食的数量为
2(两个价格为5的主食)。
- 主食价格为
-
单独选择饮料:
- 饮料价格为
[5, 5, 2]。 - 在预算
x = 5的情况下,价格为5和2的饮料可以选择。 - 因此,单独选择饮料的数量为
3(两个价格为5的饮料和一个价格为2的饮料)。
- 饮料价格为
-
组合选择主食和饮料:
- 主食价格为
[5, 20, 5],饮料价格为[5, 5, 2]。 - 在预算
x = 5的情况下,没有满足的情况。 - 因此,组合选择主食和饮料的数量为
0。
- 主食价格为
-
合并所有选择:
- 单独选择主食的数量:
2 - 单独选择饮料的数量:
3 - 组合选择主食和饮料的数量:
0 - 总选择数量为
2 + 3 + 0 = 5。
- 单独选择主食的数量:
根据上述分析,总选择数量应该是5。