题目描述
现有一组砝码,重量互不相等,分别为m1,m2,m3…mn;
每种砝码对应的数量为x1,x2,x3...xn。现在要用这些砝码去称物体的重量(放在同一侧),问能称出多少种不同的重量。
注:
称重重量包括0
方法原型:public static int fama(int n, int[] weight, int[] nums)
输入描述:
输入包含多组测试数据。对于每组测试数据:第一行:n --- 砝码数(范围[1,10])第二行:m1 m2 m3 ... mn --- 每个砝码的重量(范围[1,2000])第三行:x1 x2 x3 .... xn --- 每个砝码的数量(范围[1,6])
输出描述:
利用给定的砝码可以称出的不同的重量数
示例1
输入
复制
2 1 2 2 1
输出
复制
5
代码:
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc =new Scanner(System.in);
while(sc.hasNext()){
int n = sc.nextInt();
int weight[] = new int[n];
int nums[] = new int[n];
for(int i=0;i<n;i++){
weight[i] = sc.nextInt();
}
for(int i=0;i<n;i++){
nums[i] = sc.nextInt();
}
Set<Integer> set = new HashSet<>();
//只用第一个砝码可以称出的重量
for(int i=0;i<=nums[0];i++){
set.add(i*weight[0]);
}
for(int i=1;i<n;i++){
List<Integer> list = new ArrayList<>(set);
for(int j=1;j<=nums[i];j++){
for(int k=0;k<list.size();k++){
set.add(list.get(k)+j*weight[i]);
}
}
}
System.out.println(set.size());
}
}
}