题解 | #称砝码#

称砝码

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

import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        int total = in.nextInt();
        int[] weights = new int[total];
        int[] num = new int[total];
        for(int i=0; i<total;i++) {
            weights[i] = in.nextInt();
        }
        for(int i=0; i<total;i++) {
            num[i] = in.nextInt();
        }
        System.out.println(selectWeight(weights, num, total-1).size());
    }

    private static Set<Integer> selectWeight(int[] weights,
            int[] num,
            int i) {
        Set<Integer> s = new HashSet();
        if (i == 0) {
            for (int index = 0; index <= num[i]; index++) {
                s.add(weights[i] * index);
            }
            return s;
        }
        Set<Integer> prefixSet = selectWeight(weights, num, i - 1);    
        for (int index = 0; index <= num[i]; index++) {
            for(Integer item: prefixSet) {
                s.add(weights[i] * index + item);
            };
        }
        return s;
    }
}

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务