import java.util.ArrayList; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Scanner; import java.util.Set; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); // 注意 hasNext 和 hasNextLine 的区别 while (in.hasNextInt()) { // 注意 while 处理多个 case int n = in.nextInt(); int[] weight = new int[n]; int[] amount = new int[n]; for (int i = 0; i < n; i++) { weight[i] = in.nextInt(); } for (int i = 0; i < n; i++) { amount[i] = in.nextInt(); } //set的作用是去重,要不然后面数据累计会爆掉内存 Set<Integer>set = new HashSet<>(); set.add(0); for (int i = 0; i < n; i++) { 由set集合转换成list集合是为了方便遍历数据; List<Integer>list = new ArrayList<>(set); int len = list.size(); for (int j = 1; j <= amount[i]; j++) { for (int k = 0; k < len; k++) { //以前的重量加上引入新砝码的重量 int i1 = list.get(k) + weight[i] * j; //使用set集合的主要作用还是及时去重,减轻内存负担 set.add(i1); } } } System.out.println(set.size()); } } }