首页 > 试题广场 >

称砝码

[编程题]称砝码
  • 热度指数:213088 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
\hspace{15pt}对于给定的 n 种砝码,重量互不相等,依次为 m_1, m_2, \dots, m_n ,数量依次为 x_1, x_2, \dots, x_n
\hspace{15pt}现在要用这些砝码去称物体的重量(放在同一侧),问能称出多少种不同的重量。特别地,称重重量包括 0

输入描述:
\hspace{15pt}第一行输入一个整数 n \left(1 \leqq n \leqq 10\right) 代表砝码的个数。
\hspace{15pt}第二行输入 n 个整数 m_1, m_2, \dots, m_n \left(1 \leqq m_i \leqq 2000\right) 代表每种砝码的重量。
\hspace{15pt}第三行输入 n 个整数 x_1, x_2, \dots, x_n \left(1 \leqq x_i \leqq 10\right) 代表每种砝码的数量。


输出描述:
\hspace{15pt}输出一个整数,代表利用给定的砝码可以称出的不同的重量数。
示例1

输入

2
1 2
2 1

输出

5

说明

\hspace{15pt}在这个样例中,有 2 个重量为 1 的砝码,1 个重量为 2 的砝码。称重方式如下:
\hspace{23pt}\bullet\,不放砝码,称重重量为 0
\hspace{23pt}\bullet\,1 个重量为 1 的砝码,称重重量为 1
\hspace{23pt}\bullet\,2 个重量为 1 的砝码,称重重量为 2
\hspace{23pt}\bullet\,1 个重量为 1 的砝码、1 个重量为 2 的砝码,称重重量为 3
\hspace{23pt}\bullet\,2 个重量为 1 的砝码、1 个重量为 2 的砝码,称重重量为 4
\hspace{15pt}因此,能称出的不同重量有 5 种,分别是 0, 1, 2, 3, 4
头像 迪士尼在逃米老鼠
发表于 2020-02-23 12:25:10
怎么去重,用set集合。 首先根据输入顺序,将砝码用数字序列表示,例如2个1g和1个2g,就用 1 1 2的序列表示; set序列用来表示加入当前砝码之前能产生的重量种类; set初始化为{0};当第一个1g砝码放入时,则set中需要插入原先set中的所有元素+1g后的结果;即{0, 0+1}; 展开全文
头像 牛客155969019号
发表于 2021-10-16 14:05:01
while True: try: n = int(input()) m = list(map(int,input().split())) x = list(map(int,input().split())) except: 展开全文
头像 陶陶2021
发表于 2021-10-06 17:17:04
import java.util.*; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); while (in.h 展开全文
头像 摸鱼学大师
发表于 2021-10-21 23:45:57
题目的主要信息: 现有一组砝码,重量互不相等,分别为m1m_1m1​,m2m_2m2​,m3m_3m3​ … mnm_nmn​ 每种砝码对应的数量为x1x_1x1​,x2x_2x2​,x3x_3x3​ ...xnx_nxn​ 现在要用这些砝码去称物体的重量(放在同一侧),问能称出多少种不同的重量 展开全文
头像 萌莱_moonlight
发表于 2022-06-26 09:24:02
这道题花了我挺多时间的,有一个多小时吧(而且还是在看了大佬的思路前提下),菜鸡本人是我没错了。o(╥﹏╥)o 因为这道题并不是完全靠我自己想出来的,所以我觉得一个由不会变成会的人可能反而更能讲清楚这道题的思路应该是怎样的。 直接上代码吧! import java.util.HashSet; impo 展开全文
头像 pullgon
发表于 2022-03-26 17:42:26
思路:每次加一块砝码,得到所有组合,使用set去重。这是一种思路,我看很大一部分同学都是使用n种不同砝码进行组合,那样的话时间复杂度稍微低一点,实际看个人觉得哪种方式更好理解。 while True: try: n = int(input()) m = in 展开全文
头像 脱缰的哈士奇~
发表于 2022-06-17 22:56:38
称砝码(好题) HJ41 称砝码 | 牛客网 动态规划 # 输入 3 10 20 15 2 2 3 # 输出 20 使用动态规划求解。结合上面测试用例,对求解步骤进行说明 将所有砝码插入到一个数组 list 中,如 [10,10,20,20,15,15,15] 记砝码总重量为 weight 展开全文
头像 畅201805241231414
发表于 2022-05-08 17:40:36
对于某一个砝码重量 mim_imi​,它的数量 iii 每增加一个,weight 这个集合就要更新一次。 更新法则很简单:所有 weight 中的元素都与这个多出来的 mim_imi​ 相加,再并入原来的 weight。 iii 的上限是 xix_ixi​。 while 1: try: 展开全文
头像 隐居海洋
发表于 2022-06-11 16:56:36
let line1 = readline();let line2 = readline();let line3 = readline(); let m = line2.split( 展开全文
头像 生白
发表于 2021-03-20 14:01:51
这个题我自己没有思路,看的别人的题解,感觉解释的特别清楚https://github.com/ultraji/nowcoder这个是她的git地址利用集合去重的性质先在集合里面添加0当第一个砝码进来的时候{0} 变成 {0,0+1}->{0,1}当第二个砝码进来之后{0,1} 变成 {0,1 展开全文