码迷,mamicode.com
首页 > 其他好文 > 详细

称砝码

时间:2016-08-17 00:12:24      阅读:259      评论:0      收藏:0      [点我收藏+]

标签:

现有一组砝码,重量互不相等,分别为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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!