kiddy

经典的小偷问题dp

leave a comment »

经典的小偷问题:一排房子,每个房子里有一定价值的东西,小偷不能偷相邻的两
个房间。即如果小偷光临了房间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]);
} 

Written by linzhongzl

November 3, 2013 at 3:14 pm

Posted in Others

Leave a comment