题解 | #称砝码#

称砝码

http://www.nowcoder.com/practice/f9a4c19050fc477e9e27eb75f3bfd49c

public class Main {
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        while(sc.hasNext()){
            int n=sc.nextInt();
            int[] m=new int[n];
            int[] x=new int[n];
            for(int i=0;i<n;i++){
                m[i]=sc.nextInt();
            }
            for(int i=0;i<n;i++){
                x[i]=sc.nextInt();
            }
            HashSet<Integer> count=new HashSet<>();
            HashSet<Integer> cur=new HashSet<>();
            count.add(0);
            //对砝码按种类遍历,每种都有0-xi个数供选择
            for(int i=0;i<n;i++){
                //当前质量砝码个数遍历
                for(int j=0;j<=x[i];j++){
//                     if(count)
                    //对已经保存的质量分别加上当前j数量的砝码i得到新的质量,并添加当前新生成的质量集合cur
                    for(int mass:count){
                        cur.add(j*m[i]+mass);
                    }                    
                }
                //把当前新生成质量cur加入到count中,得到前i种砝码可获得的全部质量
                for(int mass:cur){
                    count.add(mass);
                }
                //清楚当前cur质量集合
                cur.clear();
            }
            System.out.print(count.size());
            
        }
    }
}
全部评论

相关推荐

牛至超人:把哈工大,再加大加粗,看见闪闪发光的哈工大字样,面试官直接流口水
投递字节跳动等公司10个岗位
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务