称砝码:
现有一组砝码,重量互不相等,分别为m1,m2,m3…mn;
每种砝码对应的数量为x1,x2,x3…xn。现在要用这些砝码去称物体的重量(放在同一侧),问能称出多少种不同的重量。
*****注:称重重量包括0
解题关键:
【意识到迭代逻辑,n个砝码能够称重的重量数一定是基于n-1个砝码称重数的基础上的】
利用集合去重的性质,用set缓存能得到的称重重量,以示例为例,先在集合里面添加0,
当第一个砝码进来的时候;
{0} 变成 {0,0+1} -> {0,1}
当第二个砝码进来之后;
{0,1} 变成 {0,1,0+1,1+1} --> {0,1,2}
当第三个砝码进来之后;
{0,1,2} 变成{0,1,2,0+2,1+2,2+2} —> {0,1,2,3,4}
最终set集合中的元素个数即为能称出的重量种数。
示例:
输入:
2
1 2
2 1
输出:
5
public static void main(String[] args) {Scanner in = new Scanner(System.in);int n=in.nextInt();int[] weight=new int[n];int[] index=new int[n];for(int i=0;i set=new TreeSet<>();set.add(0);//初始值设个0,刚开始set里面没有数据,设个0,跟其他的数据好加起来for(int i=0;i list=new ArrayList<>(set);for(int j=0;j<=index[i];j++){//这里注意砝码数量是可以等于index[i]的for(int k=0;k