题解 | #称砝码#

理解别人的代码后加入一些注释,方便自己理解。

import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = Integer.parseInt(sc.nextLine());
        String[] weightStr = sc.nextLine().trim().split(" ");
        String[] numberStr = sc.nextLine().trim().split(" ");
        int[] weight = new int[n];
        int[] number = new int[n];
        for (int i = 0; i < n; i++) {
            weight[i] = Integer.parseInt(weightStr[i]);
        }
        for (int i = 0; i < n; i++) {
            number[i] = Integer.parseInt(numberStr[i]);
        }
        System.out.println(getWeight(n, weight, number));
    }

    /**
        以第一个砝码为基础,在其基础上不断添加。
        砝码1的数量为1,则两种种情况:0 1
        砝码2的数量为2,则三种种情况:0 2 4
        在砝码1的基础上添加砝码2,则有:0 1、2 3、4 5,去重为:0 1 2 3 4 5
     */
    public static int getWeight(int n, int[] weight, int[] number) {
        Set<Integer> set = new HashSet<>();
        set.add(0);  // 此0为砝码0的前置情况
        // 遍历砝码 i
        for (int i = 0; i < n; i++) {
            ArrayList<Integer> list = new ArrayList<>(set);
            // 对于砝码 i,遍历其数量 j
            for (int j = 0; j <= number[i]; j++) {
                // 对于砝码 i,选择其个数为 0 - j 之间,加上其余砝码的情况
                // weight[i] * j:表示j个砝码i可以组成的数字
                // 遍历k表示:表示j个砝码i可以组成的数字 依次 加上 jj个砝码ii可以组成的数字
                // 其中ii表示 i 前面的砝码
                for (int k = 0; k < list.size(); k++) {
                    set.add(list.get(k) + weight[i] * j);
                }
            }
        }
        return set.size();
    }
}


全部评论

相关推荐

昨天 10:23
已编辑
湖南师范大学 计调
太久没更新,前几天看到一条评论,说“牛客就是当年那群做题区毕业了开始找工作还收不住那股味”的群体。字里行间透着居高临下的评判,不是,他该不会以为自己很幽默?很犀利吧?作为在牛客混了不算短日子的用户,我感到的不只是被冒犯,更是一种深刻的悲哀——这种以“松弛感”为名,对另一种生存策略的轻蔑,颇有一种自己考不上大学早早出来混社会,嘲笑考上大学的人是书呆子,然后大言不惭地说:死读书有什么用,人脉和资源才是硬道理。我不知道说这个话的人,手头究竟握着多少真正管用的人脉与资源,也不知道他这么傲慢地说出“那股味”的时候,是站在哪一个巨人的肩膀上,才能如此“松弛从容”地俯视众生,还能品评出别人身上“没收住”的余...
淬月星辉:这种评论把正常的努力扭曲成卷😂,说白了就是自己不努力,看着身边努力的人一个个都事业有成了,自己的心里开始不平衡了,就发这种酸言酸语。牛客可以说是我用过那么多平台里社区氛围最好的论坛了,用了大半年了,基本上没见过有人吵架的,都是在互帮互助提建议,帮忙看简历的,帮忙选offer的,帮忙指点学习路线的,分享工作经验和趣事的,我觉得这才是互联网该有的样子。
点赞 评论 收藏
分享
迷茫的大四🐶:如果只是看一下找个高手批一下,或者搞个假的,如果查学信网那就爆了吧
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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