前言
刚看这个题目的时候一点思路都没有,于是下定决心去参考别人的代码,看到他们分析出来是用dp,我就自己写了一个,还不错,代码挺少,挺简洁。
也是做了这题,才发现在遍历set时往里加东西会产生并发修改异常
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Scanner;
import java.util.Set;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int a;
Set<Integer> set=new HashSet<Integer>(); //用来去重
List<Integer> list; //用来遍历,不能直接遍历set
//因为在遍历的过程中要往set增加
set.add(sc.nextInt());
while(n-->1){
a=sc.nextInt();
list=new ArrayList<>(set);
for (Integer in : list) { //遍历前面的种类,与新加入的砝码组合
if(in!=a)set.add(Math.abs(in-a)); //防止相减时出现0
set.add(in+a);
}
set.add(a);
}
System.out.println(set.size());
}
}