代表团坐车 - 华为OD统一考试

OD统一考试(B卷)

分值: 100分

题解: Java / Python / C++

alt

题目描述

某组织举行会议,来了多个代表团同时到达,接待处只有一辆汽车可以同时接待多个代表团,为了提高车辆利用率,请帮接待员计算可以坐满车的接待方案输出方案数量。

约束:

  1. 一个团只能上一辆车,并且代表团人数(代表团数量小于30,每个代表团人数小于30)小于汽车容量(汽车容量小于100)。
  2. 需要将车辆坐满。

输入描述

第一行 代表团人数,英文逗号隔开,代表团数量小于30,每个代表团人数小于30。

第二行 汽车载客量,汽车容量小于100。

输出描述

坐满汽车的方案数量,如果无解输出0

示例1

输入:
5,4,2,3,2,4,9
10

输出:
4

说明:
以下几种方式都可以坐满车,[2,3,5]、[2,4,4]、[2,3,5]、[2,4,4]

题解

这个问题是经典的01背包问题可以使用动态规划来解决。

定义一个一维数组dp,其中dp[cap]表示容纳cap人的方案数。

初始时,将dp[0]设为1,因为不带走任何代表团也是一种方案。

然后,对于每一个代表团人数 x,遍历数组dp,更新dp[cap]。具体的更新方式是,对于每一个 cap,如果 cap >= x,则更新dp[cap] += dp[cap - x]。这表示当前容量为cap的方案数等于之前容量为cap - x的方案数加上带上当前代表团的方案数。

最终,dp[capacity]即为坐满汽车的方案数量。

Java

import java.util.Arrays;
import java.util.Scanner;
/**
 * @author code5bug
 */
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // 读取代表团人数
        String[] groupsStr = scanner.nextLine().split(",");
        int[] groups = Arrays.stream(groupsStr).mapToInt(Integer::parseInt).toArray();

        // 读取汽车载客量
        int capacity = scanner.nextInt();

        // dp[cap] 表示容纳 cap 人的方案数
        int[] dp = new int[capacity + 1];
        dp[0] = 1;

        for (int x : groups) {
            for (int cap = capacity; cap >= x; cap--) {
                dp[cap] += dp[cap - x];
            }
        }

        System.out.println(dp[capacity]);
    }
}

Python

groups = list(map(int, input().split(",")))
capacity = int(input())

# dp[cap] 表示容纳 cap 人的方案数
dp = [0] * (capacity + 1)
dp[0] = 1

for x in groups:
    for cap in range(capacity, x - 1, -1):
        dp[cap] += dp[cap - x]

print(dp[capacity])

C++

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main() {
	vector<int> groups;
	int t,capacity;
	while(cin >> t) {
		groups.push_back(t);
		if(cin.peek() == ',') {
			cin.ignore();
		} else {
			cin >> capacity;
			break;
		}
	}

	vector<int> dp(capacity + 1, 0);
	dp[0] = 1;

	for(int i = 0; i < groups.size(); i++) {
		int x = groups[i];
		for(int cap = capacity; cap >= x; cap--) {
			dp[cap] += dp[cap - x];
		}
	}

	cout << dp[capacity] << endl;

	return 0;
}

相关练习题

题号题目难易
LeetCode 416416. 分割等和子集中等
LeetCode 474474. 一和零中等
LeetCode 494494. 目标和中等

🙏整理题解不易, 如果有帮助到您,请给点个赞 ‍❤️‍ 和收藏 ⭐,让更多的人看到。🙏🙏🙏

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/285548.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MongoDB vs MySQL:项目选择哪一个数据库系统?

由于市场上有各种可用的数据库&#xff0c;用户经常会就MongoDB与MySQL进行辩论&#xff0c;以找出更好的选择。 使用MySQL等关系数据库的组织在根据不断变化的需求管理和存储数据时可能会面临一定的困难。同时&#xff0c;新公司想知道选择什么数据库&#xff0c;这样他们就不…

微功耗遥测终端机RTU:守护城市生命线的智能卫士

在城市的繁华背后&#xff0c;隐藏着一套高效运转的“生命线”——排水系统。而在这条生命线上&#xff0c;微功耗遥测终端机RTU(MGTR-W4131U)发挥着不可或缺的作用&#xff0c;为城市的正常运转提供了坚实保障。 微功耗遥测终端机RTU(MGTR-W4131U)&#xff0c;顾名思义&#…

星友提问:本科与硕士的区别是什么?

本科阶段: 主要以学习成绩寄点为主&#xff0c;学习知识的来源更像“大锅饭”&#xff0c;所有同学一起上课&#xff0c;一起考试&#xff0c;以学习为主。硕士阶段: 论文实验科研为主&#xff0c;相对于本来说&#xff0c;成绩弱化的厉害&#xff0c;甚至导师直接说&#xff0…

信号量机制的实际使用-第二十九天

目录 回顾旧知 实现进程互斥 实现进程同步 实现进程的前驱关系 本节思维导图 回顾旧知 1、一个信号量对应一种资源 2、信号量的值 该种资源的剩余数量&#xff08;信号量值小于0&#xff0c;说明此时有进程在等待这种资源&#xff09; 3、P(S)&#xff1a;申请一个资源S&…

三层架构概述

三层架构就是把整个软件的代码分为三个层次&#xff0c;分层的目的是&#xff1a;规范代码&#xff0c;大型软件需要团队配合的时候问题就来了&#xff0c;由于每个程序员风格不一样&#xff0c;而开发软件大量的代码风格不统一就会造成后期调试和维护出现问题&#xff0c;然而…

Dryad数据库学习

从一篇science论文中看到数据存储在了这个平台&#xff0c;这里分享一下&#xff1a;datadryad.org 亲测无需注册&#xff0c;可以直接下载&#xff0c;从一个数据测试看&#xff0c;数据存储在亚马逊云&#xff0c;下载速度还可以&#xff0c;6M/s的样子。 Dryad 是一个开放的…

把类成员函数作为参数传递给thread类......

(1)把类成员函数作为参数传递给thread类 一般地&#xff0c;在调用类的非静态函数时&#xff0c;编译器会隐式添加一参数&#xff0c;它是所操作对象的地址&#xff0c; 用于绑定对象和成员函数&#xff0c;并且位于所有其他实际参数之前。例如&#xff0c;类example具有成员函…

SMD NTC Thermistor NTC热敏电阻(贴片式)

热敏电阻器&#xff08;Thermistor&#xff09;是一种电阻值对温度极为灵敏的半导体元件&#xff0c;又可分为负温度系数&#xff08;NTC&#xff09;热敏电阻和正温度系数&#xff08;PTC&#xff09; NTC热敏电阻用于温度测量&#xff0c;温度控制&#xff0c;温度补偿等&…

单片机快速入门

参考连接&#xff1a; 安装MinGW-64&#xff08;在win10上搭建C/C开发环境&#xff09;https://zhuanlan.zhihu.com/p/85429160MinGW-64; 链接&#xff1a;https://pan.baidu.com/s/1oE1FmjyK7aJPnDC8vASmCg?pwdy1mz 提取码&#xff1a;y1mz --来自百度网盘超级会员V7的分享野…

【力扣100】【好题】79.单词搜索

添加链接描述 class Solution(object):# 定义上下左右四个行走方向directs [(0, 1), (0, -1), (1, 0), (-1, 0)]def exist(self, board, word):""":type board: List[List[str]]:type word: str:rtype: bool"""m len(board)if m 0:return Fa…

Clojure 实战(4):编写 Hadoop MapReduce 脚本

Hadoop简介 众所周知&#xff0c;我们已经进入了大数据时代&#xff0c;每天都有PB级的数据需要处理、分析&#xff0c;从中提取出有用的信息。Hadoop就是这一时代背景下的产物。它是Apache基金会下的开源项目&#xff0c;受Google两篇论文的启发&#xff0c;采用分布式的文件…

怎么给直播录屏?超简单教程,一学就会!

随着直播行业的兴起&#xff0c;许多玩家和观众都希望能够录制直播内容以方便随时回顾或与他人分享。可是怎么给直播录屏呢&#xff1f;本文将详细介绍两种流行的直播录屏方法。通过学习这两种工具&#xff0c;你可以轻松实现直播录屏&#xff0c;记录并分享你的直播内容。 怎么…

一种安防场景下融合注意力机制和时空图卷积神经网络的人体动作识别方法与流程

本发明涉及模式识别与计算机视觉领域&#xff0c;尤其涉及一种安防场景下融合注意力机制和时空图卷积神经网络的人体动作识别方法。 背景技术&#xff1a; 视觉一直是人类获取外界信息的最重要、最直观的途径&#xff0c;据有关统计&#xff0c;人类获取信息的80&#xff05;都…

2024-01-01 力扣高频SQL50题目 练习笔记

1. 1661求机器平均运行时间 在做这道题的时候&#xff0c;我遇到了4个问题 # 求平均的问题 如何找到个数? -> 相减对应列值后,直接average 就行。因为avg就是自动确定要除的个数&#xff08;当然要联合正确的group by 分组&#xff09; # 怎么根据machine_id和process_id…

主流大语言模型集体曝出训练数据泄露漏洞

内容概要&#xff1a; 安全研究人员发现&#xff0c;黑客可利用新的数据提取攻击方法从当今主流的大语言模型&#xff08;包括开源和封闭&#xff0c;对齐和未对齐模型&#xff09;中大规模提取训练数据。当前绝大多数大语言模型的记忆&#xff08;训练数据&#xff09;可被恢…

004、变量与可变性

1. 变量与可变性 在Rust中&#xff0c;变量默认是不可变的&#xff0c;这一设计是为了让你安全方便地写出复杂、甚至是并行的代码。 当然&#xff0c;Rust也提供了可使用的可变变量的方法&#xff0c;这个待会讨论。 当一个变量是不可变时&#xff0c;一旦它被绑定到某个值上面…

【Python动漫系列】HelloKitty(完整代码)

文章目录 HelloKitty环境需求完整代码HelloKitty Hello Kitty是一个非常受欢迎的卡通人物,以其可爱的形象和广泛的产品系列而闻名于世。Hello Kitty的形象是一个没有嘴巴的小白猫,穿着蓝色连衣裙和红色蝴蝶结。她有一对大大的眼睛和一个小小的鼻子,看起来非常可爱。 Hello…

Linux基础知识点(五-信号)

一、信号的基本概念 1.1 信号的概念 信号&#xff08;signal&#xff09;&#xff0c;又称为软中断信号&#xff0c;用于通知进程发生了异步事件&#xff0c;它是Linux系统响应某些条件而产生的一个事件&#xff0c;它是在软件层次上对中断机制的一种模拟&#xff0c;是一种异…

创新美食体验:从零开始的同城上门做饭APP开发指南

同城上门做饭APP为用户提供了一种全新的用餐方式。本文将带领读者从零开始&#xff0c;探索同城上门做饭APP的开发过程&#xff0c;深入了解技术细节和创新要点。 1.了解用户需求 在着手开发同城上门做饭APP之前&#xff0c;首要任务是深入了解目标用户的需求。调查用户对于美…

直接形式1(三阶)补偿器

直接形式1(三阶)补偿器 直接形式1&#xff08;DF1&#xff09;结构是一种常见类型的离散时间控制结构&#xff0c;用于实现被指定为极点零点集或z&#xff08;传递函数&#xff09;中的有理多项式的控制律。 请注意&#xff0c;系数已被调整以标准化分母中 z 的最高幂。 一般…