同样是二维数组,同样是判断和转移。不过这个用不了滚动数组优化,01背包可以优化。
有大佬能解释一下为什么和01背包这么相似吗,背后有什么相同的数学解释吗。
n,k = map(int,input().split())
dp = [[1]*(k+1) for _ in range(n+1)]
for x in range(1,n+1):
for y in range(1,k+1):
if y == 1:
dp[x][y] = 1
elif x < 2*y:
dp[x][y] = dp[x-1][y-1]
else:
dp[x][y] = dp[x-1][y-1] + dp[x-y][y]
print(dp[-1][-1])