第十九周OJ-Q198解题方法

来源:互联网 发布:拓普康怎样导入数据 编辑:程序博客网 时间:2024/06/05 01:49

问题:

ou are a professional robber planning to rob houses along a street. Each house has a certain amount of money stashed, the only constraint stopping you from robbing each of them is that adjacent houses have security system connected and it will automatically contact the police if two adjacent houses were broken into on the same night.

Given a list of non-negative integers representing the amount of money of each house, determine the maximum amount of money you can rob tonight without alerting the police.


根据问题我们可以看出,要利用到动态规划的思想。maxV[i]表示到第i个房子位置,最大收益。那转移方程可以这么表示:maxV[i] = max(maxV[i-2]+num[i],maxV[i-1])

注:是否存在如下可能性,maxV[i-1]并不含num[i-1]?结论是,在这种情况下maxV[i-1]等同于maxV[i-2],因此前者更大。


代码如下:

 introb(vector<int> &num) {

       int n = num.size();

       if(n == 0)

           return 0;

       else if(n == 1)

           return num[0];

       else

       {

           vector<int> maxV(n, 0);

           maxV[0] = num[0];

           maxV[1] = max(num[0], num[1]);

           for(int i = 2; i < n; i ++)

                maxV[i] = max(maxV[i-2]+num[i],maxV[i-1]);

            return maxV[n-1];

       }

    }


原创粉丝点击