这题是比较难的0-1背包问题了,虽然蓝桥杯官网那里还是把它归类为简单,可能也是默认你知道这种神奇的解题思维吧。
背包问题要是不会的话就赶刷一下题,蓝桥杯哪里看到比较奇怪回溯次数很多的基本都是动规的,当然:可能跟着刷完了也还是不会 >-<。
链接: 这是这题b站上的类似题讲解还有其它动态规划的讲解合辑
下面展示一些 内联代码片
。
import math
#若干个两两不同的质数之和
temp=[2]
def panduan(num):
flag=True
for i in range(2,int(math.sqrt(num))+1):
if (num%i==0):
flag=False
break
return flag
for i in range(3,2019):
if panduan(i):
temp.append(i)
#动态规划
dp=[0]*2020#含义为组成i的值共有dp[i]种方法
dp[0]=1#为什么为1我也有疑惑。望大佬想到告诉我
for i in range(len(temp)):
#j这里的temp[i]相当于一个if的作用,假设你的物品容量大于背包容量,就不能继续放进背包里面了。
for j in range(2019,temp[i]-1,-1):
dp[j]+=dp[j-temp[i]]
print(dp[2019])