• [LintCode] BackPack VI


    给出一个都是正整数的数组 nums,其中没有重复的数。从中找出所有的和为 target 的组合个数。

     注意事项

    一个数可以在组合中出现多次。
    数的顺序不同则会被认为是不同的组合。

    样例

    给出 nums = [1, 2, 4], target = 4
    可能的所有组合有:

    [1, 1, 1, 1]
    [1, 1, 2]
    [1, 2, 1]
    [2, 1, 1]
    [2, 2]
    [4]
    

    返回 6

    这是一个完全背包问题。

    class Solution {
    public:
        /**
         * @param nums an integer array and all positive numbers, no duplicates
         * @param target an integer
         * @return an integer
         */
        int backPackVI(vector<int>& nums, int target) {
            // Write your code here
            if (nums.empty())
                return 0;
            vector<int> dp(target + 1, 0);
            dp[0] = 1;
            for (int i = 0; i != target + 1; i++) {
                for (int j = 0; j != nums.size(); j++) {
                    if (i >= nums[j])
                        dp[i] += dp[i - nums[j]];
                }
            }
            return dp[target];
        }
    };
  • 相关阅读:
    bzoj 1084: [SCOI2005]最大子矩阵
    Python之深浅拷贝
    2,版本控制git --分支
    1,版本控制git--仓库管理
    python-openpyxl操作excel
    ansible-3
    ansible-2
    ansible-1
    celery
    6,MongoDB 之 Array Object 的特殊操作
  • 原文地址:https://www.cnblogs.com/immjc/p/7429726.html
Copyright © 2020-2023  润新知