【华为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
输入输出示例仅供调试,后台判题数据一般不包含示例
输入
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
- #include
- 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;
- }
