题解 | #称砝码#
称砝码
https://www.nowcoder.com/practice/f9a4c19050fc477e9e27eb75f3bfd49c
import java.util.HashSet; import java.util.Scanner; public class Main { public static void main(String[] args) { // 对于每组测试数据: // 第一行:n --- 砝码的种数(范围[1,10]) // 第二行:m1 m2 m3 ... mn --- 每种砝码的重量(范围[1,2000]) // 第三行:x1 x2 x3 .... xn --- 每种砝码对应的数量(范围[1,10]) Scanner in = new Scanner(System.in); while (in.hasNextLine()){ int n = Integer.parseInt(in.nextLine()); String[] strwight = in.nextLine().split(" "); String[] strnum = in.nextLine().split(" "); int[] wightarr = new int[n]; int[] numarr = new int[n]; HashSet<Integer> set = new HashSet<>(); set.add(0); for (int i = 0; i < n; i++) { if(strwight[i] == null || strnum[i]==null){ continue; } wightarr[i] = Integer.parseInt(strwight[i]); numarr[i] = Integer.parseInt(strnum[i]); } for (int i = 0; i < n; i++) {//循环n个砝码 HashSet<Integer> setTemp = new HashSet<>(); for (int j = 1; j <= numarr[i]; j++) { //每个砝码可以用j个 setTemp.add(wightarr[i] * j); for (int wight: set) { setTemp.add(wight + wightarr[i] * j);//当前砝码和前面的砝码可能形成的重量组合 } } set.addAll(setTemp); } System.out.println(set.size()); } } }