经典的小偷问题dp
经典的小偷问题:一排房子,每个房子里有一定价值的东西,小偷不能偷相邻的两
个房间。即如果小偷光临了房间i, 那么就不能再偷房间i – 1和房间i + 1。要求返回
小偷能偷到东西的总价值的最大值。这是个经典DP问题,版上讨论过。
//solution: dp, two rows stands for the max value if steal the current one or not. int mostSteal(vector<int> &value){ int size = value.size(); if(size == 0) return 0; if(size == 1) return value[0]; vector<vector<int> > dp(2, vector<int>(size, 0)); for(int i = 1; i < size; i++){ dp[0][i] = dp[1][i-1]+value[i]; dp[1][i] = max(dp[0][i-1], dp[1][i-1]); } return max(dp[0][size-1], dp[1][size-1]); }
Leave a comment