题解 | #称砝码#
称砝码
https://www.nowcoder.com/practice/f9a4c19050fc477e9e27eb75f3bfd49c
import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()){
int n = scanner.nextInt();
int[] w= new int[n];//不同种类对应重量数组
int[] g=new int[n];//不同种类对应个数数组
for (int i = 0; i <n; i++) {
w[i]=scanner.nextInt();
}
for (int i = 0; i <n; i++) {
g[i]=scanner.nextInt();
}
HashSet<Integer> hsout = new HashSet<>();//外部建立大的不重复集合
hsout.add(0);//允许重量为0
for (int i = 0; i <n; i++) {// 第一层循环种类,有几种就循环几次
HashSet<Integer> hsin = new HashSet<>();//每一种在循环时得到的情况先在此存储,最后合并给外部大集合
for (int j = 1; j <=g[i]; j++) {// 第二层循环个数,有几个就循环几次
int newweight = j * w[i];//个数*重量 产生新的重量可能新
for (int oldweight:hsout) {// 第三层循环外部大不重复集合的个数
hsin.add(oldweight+newweight);//取出外部大集合每一个oldweight与newweight相加,从而产生新的重量可能
}
}
hsout.addAll(hsin);//最终向外部大集合合并
}
System.out.println(hsout.size());
}
}
}
快手成长空间 763人发布