【华为OD】2024年C、D卷真题集:最新的真题集题库 C/C++/Java/python/JavaScript
【华为OD】2024年C、D卷真题集:最新的真题集题库 C/C++/Java/python/JavaScript-CSDN博客
JS、python、Java、C、C++代码实现:
【华为OD】D卷真题200分:会议接待 JavaScript代码实现[思路+代码]-CSDN博客
【华为OD】D卷真题200分:会议接待 python代码实现[思路+代码]-CSDN博客
【华为OD】D卷真题200分:会议接待 Java代码实现[思路+代码]-CSDN博客
【华为OD】D卷真题200分:会议接待 C语言代码实现[思路+代码]-CSDN博客
【华为OD】D卷真题200分:会议接待 C++代码实现[思路+代码]-CSDN博客
题目描述:
某组织举行会议,来了多个代表团同时到达,接待处只有一辆汽车,可以同时接待多个代表团,为了提高车辆利用率,请帮接待员计算可以坐满车的接待方案,输出方案数量。
约束:
1、一个团只能上一辆车,并且代表团人数(代表团数量小于30,每个代表团人数小于30)小于汽车容量(汽车容量小于100)
2、需要将车辆坐满
输入描述
第一行 代表团人数,英文逗号隔开,代表团数量小于30,每个代表团人数小于30
第二行 汽车载客量 ,汽车容量小于100
输出描述
坐满汽车的方案数量
如果无解输出0
示例1
输入输出示例仅供调试,后台判题数据一般不包含示例
输入
5,4,2,3,2,4,9
10
输出
4
说明
解释 以下几种方式都可以坐满车,所以,优先接待输出为4
[2, 3, 5]
[2, 4, 4]
[2, 3, 5]
[2, 4, 4]
备注
各代表团人数5,4,2,3,2,4,9
汽车载客量 10
输出 4
解释 以下几种方式都可以坐满车,所以,优先接待输出为4
[2, 3, 5]
[2, 4, 4]
[2, 3, 5]
[2, 4, 4]
7878688
+---+
3 | | ++ + +---|
| | | 3 + 6 + | + | +
| + | | + + + | + | +
| + | +---+ + + +++++ + + + | +
| + | + | + +----+ | | + + + | +
| + 3 | + | + + + 2 | | 2 + + + | +
| + | + | + + + | | + + + | +
| +---+ + | | | + ----+ | +---+ | | + | +
| | + | | | + | | | | | | + | +
| 1 | + | 8 | | + 1 | | | 1 | | 1 | | + | +
| | + | | | + | | | | | | | + | +
| +---+ + +---+ | ++---+ ++ +---+ +---+ | + | +
| | + | | | ++ | | |+ | +
|0 | + | 0 | 0 | ++ | 0 | |+ | +
| | + | | | ++ | | |+ | +
+---+ + +-------+ +---+| +|+ | +
+ + | +
0 1 2 3 4 5 6 7 8 9 10 11 12 + v: w u m u 1 0 2 4
题目解析:
使用递归来实现即可
代码实现:
#include <stdio.h>
#include <stdlib.h>
int ret = 0;
int all = 0;
void dfs(int * nums, int n, int idx, int sum){
if(idx == n){
return ;
}
dfs(nums, n, idx + 1, sum);
if(sum + nums[idx] == all){
ret += 1;
return ;
}else if(sum + nums[idx] < all){
dfs(nums, n, idx + 1, sum + nums[idx]);
}
}
int main(){
int nums[100] = {0};
int n = 0;
do {
scanf("%d", &nums[n]);
n++;
}while(getchar() != '\n');
ret = 0;
all = 0;
scanf("%d", &all);
if(all == 0){
printf("0");
return 0;
}
dfs(nums, n, 0, 0);
printf("%d\n", ret);
return 0;
}