题解 | #称砝码#

称砝码

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

import java.util.*;
/**
一些题解说的太复杂了,这题最简单就是顺推  举例情况 
2
1 2
2 1
不选砝码 为 0 一种情况
到重量为1的砝码,其实就是在之前的情况上叠加  目前的总情况 【0】
重量为1的砝码 与 情况1 总重量为1 叠加  总重量 1 总情况有增加
2个重量为1的砝码 与 情况1 总重量为2 叠加  总重量是 2 总情况有增加

情况就变成了3种,目前总重量的情况 【0,1,2】

到重量为2的砝码,其继续之前的情况上叠加 
重量为2的砝码 与 情况1 总重量为0 叠加  总重量还是 2 总情况没有增加
重量为2的砝码 与 情况2 总重量为3 叠加  总重量还是 3 总情况有增加
重量为2的砝码 与 情况3 总重量为4 叠加  总重量还是 4 总情况有增加

目前总重量的情况 【0,1,2,3,4】
分析到这里,其实就是把思路改为代码,已经很简单了
*/
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int anInt = scanner.nextInt();
        List<Integer> weights = new ArrayList<>();
        List<Integer> numbers = new ArrayList<>();
        int start = 0;
        while (start++ < anInt) {
            weights.add(scanner.nextInt());
        }
        start = 0;
        while (start++ < anInt) {
            numbers.add(scanner.nextInt());
        }
        Set<Integer> set = new HashSet<>(); //这就是之前的重量情况
        set.add(0);
        for (int i = 0; i < weights.size(); i++) {
            Integer number = numbers.get(i);
            int weight = weights.get(i);
            for (int j = 0; j < number; j++) {
                HashSet<Integer> hashSet = new HashSet<>(set);
                for (Integer integer : hashSet) {
                    set.add(weight + integer);
                }
            }
        }
        System.out.println(set.size());
    }
}

全部评论
23届了,怎么还在刷题,已经工作了吧
点赞 回复 分享
发布于 2023-07-21 18:20 湖南

相关推荐

一个菜鸡罢了:哥们,感觉你的简历还是有点问题的,我提几点建议,看看能不能提供一点帮助 1. ”新余学院“别加粗,课程不清楚是否有必要写,感觉版面不如拿来写一下做过的事情,教育经历是你的弱势就尽量少写 2. “干部及社团经历”和“自我评价”删掉 3. 论文后面的“录用”和“小修”啥的都删掉,默认全录用,问了再说,反正小修毕业前肯定能发出来 4. 工作经验和研究成果没有体现你的个人贡献,着重包装一下个人贡献
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
1
收藏
分享
牛客网
牛客企业服务