dp:动态规划,将一个大问题转换为若干个子问题累加在一起,每一个字问题执行完都会保存在结果里,最后从结果中寻找最优解
此问题就可以分解为,先向空容器里添加一个砝码,然后每添加一个砝码,用set先添进去,遍历list(set)集合,将此砝码与容器里每一个砝码值进行相加,相减操作。
例如,先进行2个砝码操作,然后set里会有4个结果:2个砝码值,相加、相减值;
再添加一个时,第3个砝码分别与这4个值进行相加、相减。这样就考虑了所有的结果。
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeSet;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
Set<Integer> set=new HashSet();
set.add(sc.nextInt());
while(n>1) {
int a=sc.nextInt();
n--;
ArrayList<Integer> list=new ArrayList<>(set);
Iterator<Integer> it=list.iterator();
while(it.hasNext()) {
Integer next = it.next();
set.add(Math.abs(next-a));
set.add(next+a);
}
set.add(a);
}
System.out.println(set.size());
}
}