[问题] 一个阵列运算的题目

楼主: shanlin1117 (小山)   2017-08-23 09:03:34
小弟刚刚收到同学问我的一个问题
假设你是一位职业的小偷,现在你锁定了某一条街上面的房子,
打算今天晚上对这排房子下手偷窃,每一间房子都存在着不同数目的钱。
但是相邻的两个房子间有警报系统会直接通知警察,
所以你不能连续偷两间相邻的房子,例如房子依照以下排列:A, B, C, D, E
,当妳要偷B房子时,则无法偷A与C。
给定一个阵列money[n],其中n代表有几间房子,
而阵列中的数值代表每个房子里面的金钱,
请设计一个函数来找到今晚能偷到最多的金钱数目。
例如给定阵列:
money[0] = 1
money[1] = 5
money[2] = 2
money[3] = 1
则身为职业的小偷会选择偷money[1]与money[3],而函数会回传6 (5+1)。
目前想法
假设有A B C D E F 五间房
组合就有
1. A C E
2. A C F
3. A D F
4. B D F
5. B E
然后把每个组合的数字加总起来取最大就行了
但还没有想到应该怎么去下loop
不知道有没有大大可以指点一下迷津
给提示也行QQ
作者: jej (晃奶大馬桶)   2017-08-23 09:52:00
先用线性规划找出最佳解的数学矩阵 用程式来算或者写排列组合 全列出来后淘汰有连续的组合 再去最大的
作者: ssccg (23)   2017-08-23 10:36:00
f(n) = max(f(n-1), money[n-1] + f(n-2)),标准递回DP题?不偷最后一间↑ ↑偷最后一间(不能偷倒数第二间)

Links booklink

Contact Us: admin [ a t ] ucptt.com