美文网首页
lintcode-k数和

lintcode-k数和

作者: 鬼谷神奇 | 来源:发表于2016-06-01 15:52 被阅读396次
  • 动态规划(确定0-1背包、完全背包、多重背包)
    • 0-1背包:每个元素要么出现,要么不出现,逆序遍历,数组定义为:前i个元素在不超过体积V的前提下,所能达到的最大值,初始值均为0
    • 完全背包:每个元素可以出现无数次,顺序遍历,数组定义为:前i个元素体积刚好为V的情况下,所能达到的最大价值,初始值为不存在(无穷),dp[0] = 0
    • 多重背包:通过拆分,转换为0-1背包
  • 注意点
    • 所有数组元素都要有初始值,全为0的情况特殊考虑
    • 多维数组优化
//0-1背包
class Solution {
public:
    /**
     * @param A: an integer array.
     * @param k: a positive integer (k <= length(A))
     * @param target: a integer
     * @return an integer
     */
    int kSum(vector<int> A, int k, int target) {
         if(A.size() < k || k == 0)
            return 0;

        int dp[k+1][target+1];
        
        for(int i = 0; i <= k; ++i) {
            for(int j = 0; j <= target; ++j) {
                dp[i][j] = 0;
            }
        }
        
        dp[0][0] = 1;
        
        for(int i = 0; i < A.size(); ++i) {
            for(int j = k; j >= 1; --j) {
                for(int s = target; s >= A[i]; --s) {
                    dp[j][s] = dp[j-1][s-A[i]] + dp[j][s];
                }
            }
        }
        
        return dp[k][target];
    }
};

相关文章

  • lintcode-k数和

    动态规划(确定0-1背包、完全背包、多重背包)0-1背包:每个元素要么出现,要么不出现,逆序遍历,数组定义为:前i...

  • 完数和盈数

  • k数和

    def kSum(self, A, k, target):n = len(A)if n <= 0 or k <= ...

  • K数和

    题目: 给定n个不同的正整数,整数k(k < = n)以及一个目标数字。 在这n个数里面找出K个数,使得这K个数的...

  • 目标和问题(两数&三数&四数)

    LeetCode目标和问题总结 目标和,n个数和为m https://www.jianshu.com/p/d32d...

  • 2022-09-06

    1和任何数相乘都得任何数,0和任何数相乘都得0.

  • 第五课求大数的近似数

    1.和实际生活( )的数叫做准确数。 2.和实际生活( )的数叫做近似数。 3.美国50个州和...

  • 从2数和-3数和-到4数和 2020-05-09(未经允许,禁止

    从2数和-3数和-到4数和 通解:【锁定目标对象,字典O(1)查找】 2数和 给定一个数组nums和一个targe...

  • 和高数约会

    觉得能把高数题用最简单的方法做出来的人很酷,我也想这么酷,那么我就得先学习最复杂的那种方法

  • 数和矩阵相加

    1.示例代码 import numpy import theano.tensor as T from theano...

网友评论

      本文标题:lintcode-k数和

      本文链接:https://www.haomeiwen.com/subject/exphdttx.html