题解 | #称砝码#

称砝码

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

import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()){
            int n = scanner.nextInt();
            int[] w= new int[n];//不同种类对应重量数组
            int[] g=new int[n];//不同种类对应个数数组
            for (int i = 0; i <n; i++) {
                w[i]=scanner.nextInt();
            }
            for (int i = 0; i <n; i++) {
                g[i]=scanner.nextInt();
            }
            HashSet<Integer> hsout = new HashSet<>();//外部建立大的不重复集合
            hsout.add(0);//允许重量为0
            for (int i = 0; i <n; i++) {//  第一层循环种类,有几种就循环几次
                HashSet<Integer> hsin = new HashSet<>();//每一种在循环时得到的情况先在此存储,最后合并给外部大集合
                for (int j = 1; j <=g[i]; j++) {//  第二层循环个数,有几个就循环几次
                    int newweight = j * w[i];//个数*重量 产生新的重量可能新
                    for (int oldweight:hsout) {// 第三层循环外部大不重复集合的个数
                        hsin.add(oldweight+newweight);//取出外部大集合每一个oldweight与newweight相加,从而产生新的重量可能
                    }
                }
                hsout.addAll(hsin);//最终向外部大集合合并
            }
            System.out.println(hsout.size());
        }
    }
}

全部评论
点赞 回复 分享
发布于 2024-05-14 16:29 北京

相关推荐

心愿便利贴:别管中厂小厂大厂,向"钱"看,第一份工作薪资很重要!!!影响跳槽涨幅!
点赞 评论 收藏
分享
08-16 10:51
已编辑
门头沟学院 Java
点赞 评论 收藏
分享
搞机墨镜猫:生产实习放项目下面,简化一点,如果有更好的东西就可以直接替换掉,比如你说你拆过他们的伺服电机很了解结构,可以照着画一下写成项目 项目看看能不能再找一个课设之类的包装一下(别写减速器),两个项目比较好,把项目后面的三位建模几个字去掉(这样会觉得有实物)
机械人,你的秋招第一份简...
点赞 评论 收藏
分享
我不行了,我真过不了第二关
码农索隆:嘿,哥们连界面都进去去,更别提玩了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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