这道题是动态规划问题。
题目要求我们算出T时间内打出的最高伤害,等于完全背包问题(每个物体有无数个 可以放多个相同的物体)
具体可以看看另外一篇博客写文章-CSDN创作中心
我认为最重要的还是集合划分
重点:集合划分:第i个元素选择几个
f[i][j]=f[i-1][j-k*v[i]]+k*w[i]
优化
思路:
f[i , j ] = max( f[i-1,j] , f[i-1,j-v]+w , f[i-1,j-2*v]+2*w , f[i-1,j-3*v]+3*w , .....)
f[i , j-v]= max( f[i-1,j-v] , f[i-1,j-2*v] + w , f[i-1,j-3*v]+2*w , .....)
由上两式,可得出如下递推关系:
f[i][j]=max(f[i,j-v]+w , f[i-1][j])
由此可以知道k循环可以不要
再进一步优化f[j]=max(f[j],f[j-v[i]]+w[i]);