作者:翟天保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. python常用的库_这几个常用的python库你需要知道
  2. python语句分号_python 为什么不用分号作终止符?
  3. power bi 雷达图_空天院研制的调频连续波激光雷达实现公里级成像
  4. php 怎么验证邮箱验证码,PHP 验证邮箱是否有效 - 沃森博客
  5. python中的换行符是哪个键_Python换行符问题:\r\n还是\n?
  6. pb中控件变颜色_基于GDI+技术开发工业仪表盘控件
  7. NI Vision 开发环境
  8. 桌面下雪软件测试工程师,桌面下雪
  9. 计算机思维导图药剂学,思维导图在药剂学教学中的应用
  10. Python-URL编码和URL解码方法
  11. 巧用 Cowrie 部署 SSH 蜜罐,让黑客攻击无处遁形!
  12. 51单片机DHT11温湿度传感器
  13. 白话大数据--Hash分片
  14. wet-英语困难户的好选择-控制台翻译
  15. 实习期间的一些思考整理(2)2018.4.10~4.11
  16. 【校内模拟】八云蓝(线段树)(大力分类讨论)
  17. openGL画五角星
  18. python 生成词云
  19. SM2269XT固态硬盘使用量产工具开卡成功
  20. Java版电商购物系统说明

热门文章

  1. php项目前端src文件结构,前端项目中目录结构优化的方法总结
  2. 手工测试向左,测试开发向右
  3. 梯度下降 Gradient Descent 详解、梯度消失和爆炸
  4. spring boot thymeleaf checkbox选中
  5. python request microsoft graph_从Azure函数内部调用Microsoft Graph API
  6. 【转】软件工程研究领域最顶级的两个期刊
  7. 试用期管理攻略 (6大方面)
  8. makefile 初探之《shell 函数和origin 函数》
  9. 出现偶现问题如何处理
  10. 抽象语法树 -Abstract Syntax Tree