华为机试HJ41:称砝码(深度优先遍历dfs-Depth First Search)

简介: 华为机试HJ41:称砝码(深度优先遍历dfs-Depth First Search)

题目描述:

现有一组砝码,重量互不相等,分别为m1,m2,m3…mn;

每种砝码对应的数量为x1,x2,x3...xn。现在要用这些砝码去称物体的重量(放在同一侧),问能称出多少种不同的重量。

注:

称重重量包括0

输入描述:

输入包含多组测试数据。

对于每组测试数据:

第一行:n --- 砝码数(范围[1,10])

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

第三行:x1 x2 x3 .... xn --- 每个砝码的数量(范围[1,6])

输出描述:

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

示例:

输入:

2

1 2

2 1

输出:

5

解题思路:

因为不超过十个砝码,全局创建number还有a、b两个数组,number表示砝码数量,a存储不同砝码的重量,b存储不同砝码的数量;用自定义的Statistical函数统计能称重的重量,用到的容器是unordered_set,这是为了去重,不同的组合如果得到的重量一致,保留一次即可,用set也可以实现,但是较慢。


自定义函数的逻辑:用递归的方法进行深度优先遍历,初始deep为0,开始进入循环并递归,直到deep达到最大值时实现第一次返回,此时容器中只存储了0重量;再在最深的节点处继续遍历,即加上最后一个砝码的一倍重量,存储,加上两倍重量再存储,直到遍历完最后一个砝码的数量;然后倒退一个节点,令倒数第二个砝码的一倍重量遍历一次加上最后一个砝码的各倍重量,再令倒数第二个砝码的两倍重量遍历一次加上最后一个砝码的各倍重量,以此类推;直到达到最大重量,即所有砝码的数量乘各自重量的和,递归结束。此时的容器尺寸即能称重的重量数。

测试代码:

#include <iostream>
#include <string>
#include <unordered_set>
using namespace std;
int number;
int a[11];
int b[11];
void Statistical(int deep,int weight,unordered_set<int> &s)
{
    if(deep>=number)
    {
        return;
    }
    for(int i=0;i<=b[deep];++i)
    {
        weight+=a[deep]*i;
        s.insert(weight);
        Statistical(deep+1,weight,s);
        weight-=a[deep]*i;
    }
    return;
}
int main()
{
    while(cin>>number)
    {
        for(int i=0;i<number;++i)
        {
            cin>>a[i];
        }
        for(int i=0;i<number;++i)
        {
            cin>>b[i];
        }
        unordered_set<int> s;
        Statistical(0, 0, s);
        cout<<s.size()<<endl;
    }
    return 0;
}


相关文章
|
存储 异构计算 Windows
ps2023汉化版百度网盘下载photoshop2023自带神经滤镜安装包
最近,ps迎来了2023的版本,这次的版本提升针对windows11做了特别优化,启动速度比win10快了很多。期盼已久的Win版 PS 2023 终于来了,小编也是通过特殊渠道搞来的,本期带来的WIN版本支持一键安装激活,一次安装永久免费使用 众所周知,版本越高,需要的电脑配置也就越来越高。下面放一下2023版本的配置供大家参考。需要注意的是这些版本不再支持windows7系统,仅支持win10及以上的操作系统。
12125 3
|
1月前
|
人工智能 自然语言处理 API
阿里云百炼大模型服务平台文本、图像、音频、视频等主要模型与能力介绍
阿里云百炼是一站式全模态大模型服务平台,打通通义千问全系自研模型与DeepSeek、Kimi、智谱AI等头部第三方模型的统一调用通道,无需适配多套接口,即可覆盖文本、图像、音视频、3D资产、音频语音等全链路AI生产需求。平台内Qwen3.7-Max、DeepSeek-v4-Pro等旗舰模型适配复杂推理与智能体任务,万相、HappyHorse系列支持高清图像与流畅视频生成,Tripo模型实现高精度3D资产快速构建,语音与音乐类模型覆盖多语种合成、实时识别等场景。当前新用户开通即可免费领取超7000万Tokens,90天超长有效期,大幅降低多模态AI应用的搭建门槛与探索成本。
|
Java 中间件 微服务
27个阿里 Java 开源项目,值得收藏!
大家好,这里为大家整理了阿里的Java开源项目,希望对大家有所帮助
13005 0
27个阿里 Java 开源项目,值得收藏!
|
10月前
|
消息中间件 存储 缓存
如何设计10亿用户级的微博Feed流系统并应对100W QPS的挑战?
本文详解微博Feed流系统设计,涵盖Timeline与Rank模式、推拉结合机制及四层雪崩防护体系,分享应对百万QPS高并发的架构经验,助力构建高效、稳定的大规模社交系统。
|
存储 人工智能 算法
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
这篇文章详细介绍了Dijkstra和Floyd算法,这两种算法分别用于解决单源和多源最短路径问题,并且提供了Java语言的实现代码。
1433 3
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
|
前端开发
使用ffmpeg-core的时候报错,解决Uncaught (in promise) ReferenceError: SharedArrayBuffer is not defined
使用ffmpeg-core的时候报错,解决Uncaught (in promise) ReferenceError: SharedArrayBuffer is not defined
|
数据挖掘 OLAP OLTP
深入解析:OLTP与OLAP的区别与联系
【8月更文挑战第31天】
3411 0
FlowableException: Could not update Flowable database schema: unknown version from database: ‘XXX‘
FlowableException: Could not update Flowable database schema: unknown version from database: ‘XXX‘
1675 0
|
机器学习/深度学习 人工智能 物联网
快速玩转 Llama2 机器学习 PAI 最佳实践(一)低代码 Lora 微调及部署
采用阿里云机器学习平台PAI-快速开始模块针对 Llama-2-7b-chat 进行开发。PAI-快速开始支持基于开源模型的低代码训练、布署和推理全流程,适合想要快速开箱体验预训练模型的开发者。
69938 59

热门文章

最新文章