作者:翟天保Steven
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处

题目描述:

现有一组砝码,重量互不相等,分别为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;
}

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

  1. 华为机试:二叉树中序遍历

    题目来源 华为机试:二叉树中序遍历 题目描述 题目解析 思路 class Solution{struct TreeNode{char ch;TreeNode *left;TreeNode *right ...

  2. 图的深度优先遍历(Depth First Search)

    图的深度优先遍历(Depth First Search) 基本思想 类似于二叉树的先序遍历 假设图中所有结点均未被访问,从初始结点访问,访问其第一个邻接结点,接着以被访问的邻接结点作为初始结点,访问它 ...

  3. php mysql搜索算法_PHP实现深度优先搜索算法(DFS,Depth First Search)详解

    本文实例讲述了PHP实现深度优先搜索算法.分享给大家供大家参考,具体如下: 深度优先搜索的实现原理: 实现代码: class Search_Method { //无向图的数组描述 private $d ...

  4. 华为机试108题(C 语言解答)

    Nowcoder题库链接:华为机试 HJ1 字符串最后一个单词的长度(字符串) 输入:hello nowcoder输出:8说明: 最后一个单词为nowcoder,长度为8 示例代码: HJ1.c #i ...

  5. 【强烈推荐收藏】坚持3个月爆肝华为机试108题C++全解(适合新手入门,就业必刷套题)

    作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 前言 金九银十,金三银四.当前正处于校招.社招的火热期,之前就想为正在筹备就业的同学们准备刷题宝 ...

  6. 牛客在线编程-华为机试-中等

    牛客在线编程题目-华为机试-中等 题号 题目 知识点 难度 通过率 HJ16 购物单 动态规划 中等 21.21% HJ17 坐标移动 字符串 中等 24.79% HJ20 密码验证合格程序 数组 字 ...

  7. 集合篇10.华为机试(涮题记录2)

    华为机试 31.成绩排序(**not) 32. 矩阵乘法 33. 24点游戏算法(not) 34.配置文件恢复 35. 查找两个字符串a.b中的最长公共子串 36.MP3光标位置(not) 37.DN ...

  8. (python)牛客网(华为机试四)——较难

    本博客为博主解题的部分记录,由于均为自己写的,所以答案并非最优解,有很多地方可以优化. 其他题解合集: (python)牛客网(华为机试一)--入门 (python)牛客网(华为机试二)--简单 (p ...

  9. 【华为机试 Python实现】华为机试题集合(已更新171篇)

    文章目录 新手指引 数据结构基础 华为机试真题系列 牛客网华为机试系列 Python 八股文系列 <华为机试真题详解>专栏定价99.9 包含 <华为机试真题>的所有题目. 包含 ...

最新文章

  1. CVPR2020 | 通过可微的代理投票损失进行6DoF对象位姿估计
  2. label swift
  3. og-bin=mysql-bin_init_connect + binlog 记录 mysql 操作日志
  4. mysql导出为lua配置表文件_利用lua生成一个导出数据库的bat脚本文件
  5. LNMP环境搭建——PHP篇
  6. 十个行为把你变成糟糕的程序员
  7. 北大OJ百练——4074:积水量(C语言)
  8. ubuntu搭建php开发环境记录
  9. C#之double内存
  10. 深入理解strcpy,strncpy
  11. 基于 React.js + redux + bootstrap 的 RubyChina 示例
  12. 神器 Wineskin 基础教程
  13. Kali系统学习:弱点扫描工具NMAP实战演示
  14. windows动态库和静态库
  15. java获取发件人_Java实现伪造发件人发送邮件
  16. 【渝粤教育】 国家开放大学2020年春季 1332中文学科论文写作 参考试题
  17. 校验国内外的座机和手机号码
  18. 【Seaborn】组合图表、多子图的实现
  19. python用字典存储学生成绩_掌握Python字典的12个例子
  20. 关于pr出现a low-level exception occrred in 文本(AE...)导致字幕无法输入文字的解决办法

热门文章

  1. 三言|打好日志,不要指望复现来查找原因
  2. 《仙剑奇侠传柔情版》Java的简单实现(二)
  3. debian下面使用wine淘宝旺旺成功
  4. SpringBoot(powernode)(内含教学视频+源代码)
  5. jquery给input赋值
  6. GoDEX G500 打印不齐
  7. C# 优雅的实现ApiHook
  8. 小白说代码——炼金术师
  9. 【CSS】阿里iconfont的使用方法(另附font-family引入方法)
  10. 企业如何做客户分级和团队分组?