OJ练习38——T198 House Robber

抢劫一排沿街的房子,每一家有不同的财富值,一夜之内抢了连续两家就会拉响报警。

给出每家的财富值,求最多能抢到多少?

【思路】

动态规划求最优解。

解题关键:递推式——maxV[i]=max{maxV[i-2]+nums[i], maxV[i-1]};

【other code】

int rob(vector<int>& nums) {
        int n=nums.size();
        if(n==0)
            return 0;
        if(n==1)
            return nums[0];
        vector<int> maxV(n,0);
        maxV[0]=nums[0];
        maxV[1]=max(nums[0],nums[1]);
        for(int i=2; i<n; i++)
            maxV[i]=max(maxV[i-2]+nums[i], maxV[i-1]);
        return maxV[n-1];
    }

【notes】

动态规划基本思想,由最简单的情况开始,每加入一个节点,要计算当前的最优值。

代码很容易,算法很难想,关键是递推式。

posted on 2015-05-04 09:02  EmmaLi  阅读(87)  评论(0编辑  收藏  举报

导航