LeetCode 213:House Robber II

来源:互联网 发布:破壁机推荐 知乎 编辑:程序博客网 时间:2024/05/19 04:54
class Solution {public:int rob(vector<int>& nums) {int length = nums.size();//cout << "length = " << length << endl;int dp[10000] = {0};int max1 = 0;int max2 = 0;if (length == 0){return 0;}if (length == 1){return nums[0];}if (length == 2){return nums[0] >= nums[1] ? nums[0] : nums[1];}int count = 0;int max = 0;if (length == 3){while (count < 3){if (nums[count] >max){max = nums[count];}count++;}return max;}  max = 0;dp[0] = nums[0];dp[1] = nums[0] >= nums[1] ? nums[0] : nums[1];for (int i = 2; i<length - 1; i++){//cout << "1:  i  = " << i << endl;max = 0;for (int j = 0; j < i - 1; j++){//cout << "1:  j  = " << j << endl;if (dp[j] >= max){max = dp[j];//cout << "1:  max  = " << max << endl;}}cout << "###   1:  max  = " << max << endl;dp[i] = max + nums[i];//int max1 = dp[i];if (dp[i] >max1){max1 = dp[i];}//cout << "dp[i] = " << dp[i] << " 1: i = " << i << endl;}max = 0;int fp[1000] = {0};fp[1] = nums[1];fp[2] = nums[2];for (int i = 3; i < length; i++){//cout << "2:  i  = " << i << endl;for (int j = 1; j < i - 1; j++){//cout << "2: j = " << j << endl;if (fp[j] >= max){max = fp[j];//cout << "2: max= " << max << endl;}}fp[i] = max + nums[i];//cout << "fp[i] = " << fp[i] << " 1: i = " << i << endl;if (fp[i]>max2){max2 = fp[i];}}if (max2 >= max1){return max2;}else{return max1;}}};

这道题不要想的太复杂就是针对第一种情况的两种情况分类讨论,对于边界的处理要比第一种rober多了一个长度为三的处理,分成2到n-1,3到n两种情况处理

点击打开链接动态规划题目列表

0 0
原创粉丝点击