Bootstrap

蓝桥杯试题 历届真题 砝码称重【第十二届】【省赛】【JAVAB组】

 前言

 刚看这个题目的时候一点思路都没有,于是下定决心去参考别人的代码,看到他们分析出来是用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());				
	
	}


}

 

;