Algorithm 动态规划-书架的最大布局
我试图解决一个问题,所以我不是在寻找代码,而是寻找类似的算法,这样我就可以自己解决它 我得到了Algorithm 动态规划-书架的最大布局,algorithm,dynamic-programming,Algorithm,Dynamic Programming,我试图解决一个问题,所以我不是在寻找代码,而是寻找类似的算法,这样我就可以自己解决它 我得到了n书架,每个书架都有大小数量的书。我将把其中一些书架搬到一个新房间,如下所示: 第一个书架将始终被移动 我将保留新房间中书架的顺序(我不能在新房间中更改位置,一旦我选择了书架6,我就不能从0到5中选择任何一本书) 书架i不能放在任何一个书架i-1或i+1旁边(例如:我不能放?-4-5-?/?-5-6-?/?-4-5-6-?) 哪种配置的书架能为我提供最多的书 我知道这是用动态规划算法解决的,但我不确
n
书架,每个书架都有大小
数量的书。我将把其中一些书架搬到一个新房间,如下所示:
- 第一个书架将始终被移动李>
- 我将保留新房间中书架的顺序(我不能在新房间中更改位置,一旦我选择了书架
,我就不能从6
中选择任何一本书)李>0到5
- 书架
不能放在任何一个书架i
或i-1
旁边(例如:我不能放?-4-5-?/?-5-6-?/?-4-5-6-?)李>i+1
非常感谢您的任何建议 制作一个数组
int M[n]
,并设置M[0]=b[0]
,因为第一个书架总是被移动的。然后进行如下操作:
- 对于每个元素
,其中b[i]
,设置i>0
M[i]=b[i]
- 在
到0
范围内的i-2
索引M
处遍历j
元素;从M
,因为你不能拿i-2开始
b[i]
- 将
设置为当前M[i]
和M[i]
的最大值。这句话的意思是“我拿着M[j]+b[i]
,把它放在以b[I]
结尾的一系列书架上。”j
- 循环结束后,遍历
,找到最高的元素。这是你的答案M[]
- 要打印书架索引的顺序,请从
(例如,M[]
)的最大元素位置开始,然后打印p
p
- 现在通过
查看位置M
,以便k
。由于数组M[k]=M[p]-b[p]
的构造方式,至少会有一个这样的元素M[]
- 打印
,设置k
,然后继续,直到到达数组的开头p=k