[LintCode] Backpack VI 背包之六

Given an integer array nums with all positive numbers and no duplicates, find the number of possible combinations that add up to a positive integer target.

Notice

The different sequences are counted as different combinations.

Have you met this question in a real interview?

Yes

Example

Given nums = [1, 2, 4], target = 4

The possible combination ways are:
[1, 1, 1, 1]
[1, 1, 2]
[1, 2, 1]
[2, 1, 1]
[2, 2]
[4]

return 6

不太懂这题名称为啥叫backpack,LeetCode上的原题,请参见我之前的博客Combination Sum IV 。

解法一:

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) {
        vector<int> dp(target + 1, 0);
        dp[0] = 1;
        for (int i = 1; i <= target; ++i) {
            for (auto a : nums) {
                if (a <= i) {
                    dp[i] += dp[i - a];
                }
            }
        }
        return dp.back();
    }
};

解法二:

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) {
        vector<int> dp(target + 1, 0);
        dp[0] = 1;
        sort(nums.begin(), nums.end());
        for (int i = 1; i <= target; ++i) {
            for (auto a : nums) {
                if (a > i) break;
                dp[i] += dp[i - a];
            }
        }
        return dp.back();
    }
};
时间: 2024-10-12 04:16:54

[LintCode] Backpack VI 背包之六的相关文章

[LintCode] BackPack Dynamic Programming Problems

This blog talks about using dynamic programming to solve the famous back pack and its variant problems. BackPack I Given n items with size Ai, an integer m denotes the size of a backpack. How full you can fill this backpack? Notice You can not divide

Lintcode: Backpack

Given n items with size A[i], an integer m denotes the size of a backpack. How full you can fill this backpack? Note You can not divide any item into small pieces. Example If we have 4 items with size [2, 3, 5, 7], the backpack size is 11, we can sel

0-1背包 动态规划

给定n种物品和一个背包,物品i的重量是wi,价值vi,背包的重量是C,问如何选择装入背包的物品,使装入背包中的物品总价值最大? 对于每种物品只能选择完全装入或不装入,一个物品至多装入一次. 输入:整数C>0,整数wi>0,vi>0,1≤i≤n 输出:(x1,x2,....,xn),xi∈{0,1},满足∑1≤i≤nwixi≤C最大 问题优化子结构 Pi=[{i,i+1,.......,n},Ci=C?∑1≤k≤i?1wkxk] 代表物品1-i?1已经考虑完毕,物品i-n还没有被考虑是否被

92 背包问题

原题网址:https://www.lintcode.com/problem/backpack/description 描述 在n个物品中挑选若干物品装入背包,最多能装多满?假设背包的大小为m,每个物品的大小为A[i] 你不可以将物品进行切割. 您在真实的面试中是否遇到过这个题?  是 样例 如果有4个物品[2, 3, 5, 7] 如果背包的大小为11,可以选择[2, 3, 5]装入背包,最多可以装满10的空间. 如果背包的大小为12,可以选择[2, 3, 7]装入背包,最多可以装满12的空间.

TED_8:How to control someone else&#39;s arm with your brain

By Greg Gage (Neuroscientist) Greg Gage is on a mission to make brain science accessible to all. In this fun, kind of creepy(令人毛骨悚然的,恐怖的) demo, the neuroscientist and TED Senior Fellow uses a simple, inexpensive DIY kit to take away the free will of

Python实现Wordcloud生成词云图的示例

wordcloud是Python扩展库中一种将词语用图片表达出来的一种形式,通过词云生成的图片,我们可以更加直观的看出某篇文章的故事梗概. 首先贴出一张词云图(以哈利波特小说为例): 在生成词云图之前,首先要做一些准备工作 1.安装结巴分词库 pip install jieba Python中的分词模块有很多,他们的功能也都是大同小异,我们安装的结巴分词 是当前使用的最多的类型. 下面我来简单介绍一下结巴分词的用法 结巴分词的分词模式分为三种: (1)全模式:把句子中所有的可以成词的词语都扫描出

背包九讲之六(分组背包问题)

1 /* 2 有n件物品和一个容量为v的背包,第i件物品的费用是c[i],价值是w[i] 3 这些物品被分为若干组,每组中的物品互相冲突,即一组中只能取一件物品 4 将哪些物品装入背包使得总价值最大 5 dp[k][v] 表示前k组物品花费容量v能取到的最大值 6 dp[k][v] = max(dp[k-1][v],dp[k-1][v-c[i]]+w[i])//物品i属于第k组 7 for(i=1; i<=k; ++i) 8 for(j=v;j>=0; ++j) 9 for(所有的l属于组k)

Backpack II

Given n items with size Ai and value Vi, and a backpack with size m. What's the maximum value can you put into the backpack? Given 4 items with size [2, 3, 5, 7] and value [1, 5, 2, 4], and a backpack with size 10. The maximum  value is 9. 这是最经典的0-1背

01背包问题-只求背包的最终最大价值,不考虑选哪些物品怎么放---最优解(欢迎讨论)

题目来自lintcode http://www.lintcode.com/zh-cn/problem/backpack/ 一个传统01背包问题的推广,假如只考一个背包放物品之后的最终最大价值,不考虑具体选哪些物品放入,该如何实现? 最蠢最笨的办法,那当然就是-老老实实的构造背包容量-物品矩阵,然后取出矩阵最上方最右的值即可: 代码也非常易懂: class Solution: # @param m: An integer m denotes the size of a backpack # @pa