题解 | #称砝码#
称砝码
https://www.nowcoder.com/practice/f9a4c19050fc477e9e27eb75f3bfd49c
import java.util.*;
/**
一些题解说的太复杂了,这题最简单就是顺推 举例情况
2
1 2
2 1
不选砝码 为 0 一种情况
到重量为1的砝码,其实就是在之前的情况上叠加 目前的总情况 【0】
重量为1的砝码 与 情况1 总重量为1 叠加 总重量 1 总情况有增加
2个重量为1的砝码 与 情况1 总重量为2 叠加 总重量是 2 总情况有增加
情况就变成了3种,目前总重量的情况 【0,1,2】
到重量为2的砝码,其继续之前的情况上叠加
重量为2的砝码 与 情况1 总重量为0 叠加 总重量还是 2 总情况没有增加
重量为2的砝码 与 情况2 总重量为3 叠加 总重量还是 3 总情况有增加
重量为2的砝码 与 情况3 总重量为4 叠加 总重量还是 4 总情况有增加
目前总重量的情况 【0,1,2,3,4】
分析到这里,其实就是把思路改为代码,已经很简单了
*/
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int anInt = scanner.nextInt();
List<Integer> weights = new ArrayList<>();
List<Integer> numbers = new ArrayList<>();
int start = 0;
while (start++ < anInt) {
weights.add(scanner.nextInt());
}
start = 0;
while (start++ < anInt) {
numbers.add(scanner.nextInt());
}
Set<Integer> set = new HashSet<>(); //这就是之前的重量情况
set.add(0);
for (int i = 0; i < weights.size(); i++) {
Integer number = numbers.get(i);
int weight = weights.get(i);
for (int j = 0; j < number; j++) {
HashSet<Integer> hashSet = new HashSet<>(set);
for (Integer integer : hashSet) {
set.add(weight + integer);
}
}
}
System.out.println(set.size());
}
}
