题解 | #称砝码#
称砝码
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()); } }