完全背包
def material_bag ( N, V, weight, value) : dp = [ 0 ] * ( V+ 1 ) for i in range ( N) : for j in range ( weight[ i] , V+ 1 ) : dp[ j] = max ( dp[ j] , dp[ j- weight[ i] ] + value[ i] ) return dp[ V] if __name__== '__main__' : N, V = map ( int , input ( ) . split( ) ) weight = [ ] value = [ ] for i in range ( N) : a, b = input ( ) . split( ) weight. append( int ( a) ) value. append( int ( b) ) result = material_bag( N, V, weight, value) print ( result)
518. 零钱兑换 II
class Solution ( object ) : def change ( self, amount, coins) : """:type amount: int:type coins: List[int]:rtype: int""" dp = [ 0 ] * ( amount+ 1 ) dp[ 0 ] = 1 for coin in coins: for j in range ( coin, amount+ 1 ) : dp[ j] += dp[ j- coin] return dp[ amount]
377. 组合总和 Ⅳ
class Solution ( object ) : def combinationSum4 ( self, nums, target) : """:type nums: List[int]:type target: int:rtype: int""" dp = [ 0 ] * ( target+ 1 ) dp[ 0 ] = 1 for j in range ( 1 , target+ 1 ) : for num in nums: if j >= num: dp[ j] += dp[ j- num] return dp[ target]
70. 爬楼梯 (进阶)
def climb_stairs ( n, m) : dp= [ 0 ] * ( n+ 1 ) dp[ 0 ] = 1 for j in range ( 1 , n+ 1 ) : for i in range ( 1 , m+ 1 ) : if j>= i: dp[ j] += dp[ j- i] return dp[ n] if __name__== '__main__' : n, m = map ( int , input ( ) . split( ) ) result = climb_stairs( n, m) print ( result)