V=int(input()) n=int(input()) a=[] for _ in range(n): a.append(int(input())) # dp[j] 表示是否存在一个子集,使得体积和正好等于 s dp=[False]*(V+1) dp[0]=True for w in a:#每考虑一个物体,dp[j]都会被更新 if w>V: continue for j in range(V,w-1,-1):#对于j<=w的dp[j]肯定不需要更新 if dp[j-w]: #j是V,V-1,...,w 这样递减的,最后一步必然是j-w=0 dp[j]=True for k in range(V,-1,-1): if dp[k]: print(V-k) break
降低空间复杂度:改用一维 dp, 让dp[j] 表示是否存在一个子集,使得体积和正好等于 s