https://leetcode.com/problems/house-robber/
题目大意:在一条街上有一排的房子,每个房子都有一定数量的钱。一个小偷去偷钱,但如果他偷连续的两个房子的东西,那么就会触动警报。问小偷最多能偷多少的钱。
题解:其实就是一个简单的dp。假设,小偷当前在i点,如果他偷第i个房子的钱,那么他将拥有的钱是dp[i-1][0]+num[i]。如果他不偷第i个房子的钱,那么他将拥有的钱是
max(dp[i-1][0], dp[i-1][1])。具体代码如下:
class Solution {
public:
int rob(vector<int> &num) {
int dp[1001][2];
// dp[i][0] not
// dp[i][1] pick
int len=num.size();
if(len==0) return 0;
dp[0][1]=num[0];
dp[0][0]=0;
for(int i=1;i<len;i++)
{
dp[i][0]=max(dp[i-1][1],dp[i-1][0]);
dp[i][1]=dp[i-1][0]+num[i];
}
return max(dp[len-1][0],dp[len-1][1]);
}
};