• 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.

    注意事项

    The different sequences are counted as different combinations.
    样例
    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
    题目分析:
    典型的动态规划问题,状态转移方程:

    dp[x+y]+=dp[x]

    我们需要一个一维数组dp,其中dp[i]表示目标数为i的解的个数,然后我们从1遍历到target,对于每一个数i,遍历nums数组,如果

    i>=x, dp[i] += dp[i - x]

    Python代码

    class Solution:
        # @param {int[]} nums an integer array and all positive numbers, no duplicates
        # @param {int} target an integer
        # @return {int} an integer
        def backPackVI(self, nums, target):
            # Write your code here
            dp=[0]*(target +1)
            dp[0]=1
            for x in range(target +1):
                for y in nums:
                    if x+y<=target:
                        dp[x+y]+=dp[x]
            return dp[target]
    
  • 相关阅读:
    [DP]ARC072E Alice in linear land
    [莫队][离散化]luogu P3709 大爷的字符串题
    [Splay]luogu P2596 书架
    [BSGS][哈希]luogu P3846 可爱的质数
    [机房测试]10.25
    [机房测试]10.24
    [机房测试]10.23
    [机房测试]10.22
    [机房测试]10.21
    区间伸缩算法小礼包
  • 原文地址:https://www.cnblogs.com/wangnanabuaa/p/6197470.html
Copyright © 2020-2023  润新知