华为机试HJ41 称砝码

news/2024/11/15 18:22:47/

首先看一下题

描述

现有n种砝码,重量互不相等,分别为 m1,m2,m3…mn ;
每种砝码对应的数量为 x1,x2,x3...xn 。现在要用这些砝码去称物体的重量(放在同一侧),问能称出多少种不同的重量。

注:

称重重量包括 0

数据范围:每组输入数据满足  1≤n≤10  , 1≤mi​≤2000  , 1≤xi​≤10 

输入描述:

对于每组测试数据:
第一行:n --- 砝码的种数(范围[1,10])
第二行:m1 m2 m3 ... mn --- 每种砝码的重量(范围[1,2000])
第三行:x1 x2 x3 .... xn --- 每种砝码对应的数量(范围[1,10])

输出描述:

利用给定的砝码可以称出的不同的重量数

示例1

输入:

2
1 2
2 1

输出:

5

说明:

可以表示出0,1,2,3,4五种重量。   

一、问题分析

首先读题,仔细看描述中的内容,发现需求是

1.现在有n种砝码

2.重量互不相等

3.分别为m1,m2,m3...mn;

4.每种砝码对应的数量为x1,x2,x3...xn。

5.现在要用这些砝码去称物体的重量(放在同一侧),

6.问能称出多少种不同的重量。

7.称重重量包括0

8.数据范围:每组输入数据满足n大于等于1小于等于10,mi大于等于1小于等于2000,xi大于等于1,小于等于10

9.输入描述:对于每组测试数据:

第一行:n 法码的种数(范围[1,10])

第二行:m1 m2 m3 .. mn 每种砝码的重量(范围[1,2000])

第三行:x1 x2 x3 ... xn 每种砝码对应的数量(范围[1,10])

10.输出描述:利用给定的砝码可以称出的不同的重量数

二、解题思路

1.首先我们最大可以称量的重量是2000*10*10 = 200000

2.我们可以定义一个int dp[200001] = {0};用来标记我们是否已经称量过某个重量

3.我们定义一个int count = 0;用来计算我们可以称量的不同的重量数

4.我们定义一个int n 用来存储砝码的种数

5.我们定义一个int m[n]用来存放每种砝码的重量

6.我们定义一个int x[n];用来存放每种砝码对应的数量

7.之后我们希望计算不同砝码的组合能够组成的重量值

8.计算出来重量值如果dp[重量] == 0;那么我们count++,dp[重量] = 1;

如果已经计算过了,我们不重复计算

三、具体步骤

使用的语言是C

#include <stdio.h>int main() {int n;while(scanf("%d", &n) != EOF) {int m[n];for(int i = 0; i < n; i++) {scanf("%d", &m[i]);}int x[n];for(int i = 0; i < n; i++) {scanf("%d", &x[i]);}// total用来计算我们可以称量的最大重量int total = 0;for(int i = 0; i < n; i++) {// 使用每种砝码的重量乘以数量得到每种砝码最大承重量,再相加total += m[i] * x[i];}// 定义一个数组可以表示某个重量是否称量过,第一个元素为1(代表称量过)int arr[200001] = {1};for(int i = 0; i < n; i++) {// 循环遍历每种砝码for(int j = 0; j < x[i]; j++) {// 遍历当前砝码(第i个)的个数x[i]for(int k = total; k >= 0; k--) {// 遍历所有的重量if(arr[k]) {// 如果遇到称量过的重量(以0为开始),我们将当前的这个砝码的重量也加上去,标记为称量过了arr[k + m[i]] = 1;}}}}int count = 0;for (int i = 0; i <= total; i++) {if(arr[i] == 1) {count++;}}printf("%d\n", count);return 0;}
}

http://www.ppmy.cn/news/1547250.html

相关文章

【AlphaFold3】开源本地的安装及使用

文章目录 安装安装DockerInstalling Docker on Host启用Rootless Docker 安装 GPU 支持安装 NVIDIA 驱动程序安装 NVIDIA 对 Docker 的支持 获取 AlphaFold 3 源代码获取基因数据库获取模型参数构建将运行 AlphaFold 3 的 Docker 容器 参考 AlphaFold3: https://github.com/goo…

电子电气架构 --- 基于以太网的电子电气架构概述

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 所有人的看法和评价都是暂时的&#xff0c;只有自己的经历是伴随一生的&#xff0c;几乎所有的担忧和畏惧…

ArkTS学习笔记:ArkTS起步

ArkTS是HarmonyOS的主力应用开发语言&#xff0c;基于TypeScript扩展&#xff0c;强化了静态检查和分析&#xff0c;旨在提升程序稳定性和性能。它采用静态类型&#xff0c;禁止运行时改变对象布局&#xff0c;并对UI开发框架能力进行扩展&#xff0c;支持声明式UI描述和自定义…

批量重命名Excel文件并排序

批量重命名Excel文件并排序 python环境&#xff1a;3.5.2 import os import logging# 配置日志记录 logging.basicConfig(levellogging.INFO, format%(asctime)s - %(levelname)s - %(message)s)def rename_files_with_sequence(directory):# 检查文件夹是否存在if not os.pa…

Spring Boot 应用程序中集成 Redis 并实现存储读取字符串或者复杂对象

步骤如下&#xff1a; 1. 添加依赖 确保你的 pom.xml 中包含以下依赖&#xff1a; <dependencies><!-- Spring Boot Starter Web --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web<…

Spring Plugin与策略模式:打造动态可扩展的应用

目录 一、策略模式 二、Spring Plugin 2.1 Spring Plugin 实现策略模式开发 2.2 策略模式优缺点 三、Spring Plugin 原理 一、策略模式 策略模式是一种设计模式&#xff0c;它允许程序在运行中动态的选择不同的行为方式进行动态执行。策略模式的核心思想是将行为封装在一个个…

表的数据结构和常见操作

在计算机科学中&#xff0c;表数据结构是一种用于组织和存储数据的方式&#xff0c;它具有行和列的形式&#xff0c;类似于电子表格或数据库表。表数据结构可以用于多种用途&#xff0c;具体取决于实现和使用场景。以下是几种常见的表数据结构&#xff1a; ### 1. 数组&#x…

Linux Kernel Programming 2

目录 书写内核框架 起手我们需要理解的是&#xff1a;用户态和内核态 库和系统调用 API 内核空间组件 探索 LKM&#xff08;Linux Kernel Module体系&#xff09; LKM 框架 内核源代码树中的内核模块 modinfo 动手&#xff01;写年轻人的第一个内核模块程序 先试试看&…