标签:
现有一组砝码,重量互不相等,分别为m1,m2,m3…mn;
每种砝码对应的数量为x1,x2,x3...xn。现在要用这些砝码去称物体的重量,问能称出多少中不同的重量。
注:
称重重量包括0
方法原型:public static int fama(int n, int[] weight, int[] nums)
输入描述:
输入包含多组测试数据。
对于每组测试数据:
第一行:n --- 砝码数(范围[1,10])
第二行:m1 m2 m3 ... mn --- 每个砝码的重量(范围[1,2000])
第三行:x1 x2 x3 .... xn --- 每个砝码的数量(范围[1,6])
输出描述:
利用给定的砝码可以称出的不同的重量数
输入例子:
2 1 2 2 1
输出例子:
5
1 import java.util.*; 2 3 public class Main{ 4 public static void main(String[] args){ 5 Scanner s=new Scanner(System.in); 6 while(s.hasNext()){ 7 int n=s.nextInt(); 8 int[] arr1=new int[n]; 9 int[] arr2=new int[n]; 10 int total=0; 11 for(int i=0;i<n;i++) 12 arr1[i]=s.nextInt(); 13 14 for(int i=0;i<n;i++){ 15 arr2[i]=s.nextInt(); 16 total=total+arr1[i]*arr2[i]; 17 } 18 TreeSet<Integer> set=new TreeSet<Integer>(); 19 set.add(total); 20 21 for(int i=0;i<n;i++){ 22 Object[] set1=set.toArray(); 23 24 for(Object a:set1){ 25 int j=1; 26 while(j<=arr2[i]){ 27 set.add((Integer)a-j*arr1[i]); 28 j++; 29 } 30 } 31 } 32 System.out.println(set.size()); 33 } 34 } 35 }
逆向思维用总数往下减的方式。
标签:
原文地址:http://www.cnblogs.com/lydandan/p/5778244.html