- 实现:
- 先将重量和数量 展开得到一个所有砝码的List;
- 使用set对所有砝码可能的和去重;
- 每新增一个砝码,循坏所有的和与心砝码求和。 再加入set中。
import java.util.Scanner;
import java.util.List;
import java.util.ArrayList;
import java.util.Set;
import java.util.HashSet;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNext()) { // 注意 while 处理多个 case
int n = in.nextInt();
int[] weight = new int[n];
int[] nums = new int[n] ;
for (int i = 0; i < n; i++) weight[i] = in.nextInt();
for (int i = 0; i < n; i++) nums[i] = in.nextInt();
// 所有砝码重量list
List<Integer> weights = new ArrayList<>();
for (int i = 0; i < n; i++) {
int w = weight[i];
int count = nums[i];
while (count > 0) {
weights.add(w);
count--;
}
}
Set<Integer> set = new HashSet<>();
set.add(0);
for (int i = 0; i < weights.size(); i++) {
// 临时存"和"的地方
List<Integer> tempSum = new ArrayList<>();
// set 中的每个元素 和当前元素求和
for (Integer integer : set) tempSum.add(integer + weights.get(i));
// 所有的和 放入
set.addAll(tempSum);
// list
tempSum.clear();
}
// for (Integer integer : set) {
// System.out.print(integer + " ");
// }
System.out.println(set.size());
}
}
}