题解 | #称砝码#动态规划

称砝码

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

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        while (scanner.hasNext()) {
            int n = scanner.nextInt();
            int[] weights = new int[n];
            int[] quantities = new int[n];

            for (int i = 0; i < n; i++) {
                weights[i] = scanner.nextInt();
            }

            for (int i = 0; i < n; i++) {
                quantities[i] = scanner.nextInt();
            }

            int result = countDistinctWeights(weights, quantities);
            System.out.println(result);
        }
    }

    public static int countDistinctWeights(int[] weights, int[] quantities) {
        int maxWeight = 0;
        for (int i = 0; i < weights.length; i++) {
            maxWeight += weights[i] * quantities[i];
        }

        boolean[] dp = new boolean[maxWeight + 1];
        dp[0] = true;

        for (int i = 0; i < weights.length; i++) {
            for (int j = maxWeight; j >= weights[i]; j--) {
                for (int k = 1; k <= quantities[i] && k * weights[i] <= j; k++) {
                    dp[j] |= dp[j - k * weights[i]];
                }
            }
        }

        int count = 0;
        for (boolean value : dp) {
            if (value) {
                count++;
            }
        }

        return count;
    }
}

全部评论

相关推荐

03-05 14:55
已编辑
门头沟学院 Java
Jhin4ever:别去,杂活太多,今天让你部署一下模型,明天让你写一下LLM工作流,后天要你研究一下Agent,想微调模型都难
点赞 评论 收藏
分享
03-21 08:46
已编辑
门头沟学院 C++
一个什么都不会的学生:当你有硕士学历的时候HR会说就是比本科生强
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务