大大大大大大大大大大大大大大大 2025-02-23 16:30 采纳率: 33.3%
浏览 21
已结题

深入浅出学算法070-砝码称重

深入浅出学算法070-砝码称重

时间限制 : 1.000 sec 内存限制 : 128 MB

题目描述
设有1克、2克、3克和5克和10克、20克的砝码各若干枚(其总重≤1000),
输入
输入方式:a1 , a2 ,……, a6
(表示1g砝码有a1个,2g砝码有aa2个,…,20g砝码有a6个)
输出

输出方式:Total=N
(N表示用这些砝码能称出的不同重量的个数,但不包括一个砝码也不用的情况)
样例输入 Copy
1 1 0 0 0 0
样例输出 Copy
Total=3

  • 写回答

4条回答 默认 最新

  • 阿里嘎多学长 2025-02-23 16:30
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    深入浅出学算法070-砝码称重

    问题描述:有1克、2克、3克和5克和10克、20克的砝码各若干枚,总重≤1000克。输入方式:a1

    解决方案:

    可以使用动态规划解决这个问题。首先,我们可以将砝码的重量从小到大排序,然后遍历每个砝码,计算当前砝码的组合数目。对于每个砝码,我们可以使用一个数组来存储当前砝码的组合数目。

    #include <iostream>
    #include <vector>
    #include <algorithm>
    
    using namespace std;
    
    int main() {
        int n;
        cin >> n;
        vector<int> weights = {1, 2, 3, 5, 10, 20};
        vector<int> dp(1001, 0);
        dp[0] = 1;
        for (int i = 0; i < n; i++) {
            for (int j = 1000; j >= weights[i]; j--) {
                dp[j] += dp[j - weights[i]];
            }
        }
        cout << dp[1000] << endl;
        return 0;
    }
    

    在上面的代码中,我们首先读取输入的砝码数量,然后将砝码的重量从小到大排序。然后,我们使用一个数组dp来存储当前砝码的组合数目。对于每个砝码,我们遍历每个可能的重量,计算当前砝码的组合数目,并将其添加到dp数组中。最后,我们输出dp[1000],即总重≤1000克的砝码组合数目。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月9日
  • 创建了问题 2月23日