题意
首尾相连的一串物品,选择价值最大的不相邻物品组合
思路
分成1——n-1 和2——n两次DP即可
代码
class Solution {
public:
int rob(vector<int>& nums) {
if (nums.size() == 0) return 0;
if (nums.size() == 1) return nums[0];
vector<int> arr1 = nums, arr2 = nums;
arr1.erase(arr1.begin());
arr2.pop_back();
arr1.insert(arr1.begin(), 0);
arr2.insert(arr2.begin(), 0);
int dp1[100005], dp2[100005];
dp1[1] = arr1[1], dp2[1] = arr2[1];
for (int i = 2; i < arr1.size(); i++)
{
dp1[i] = max(dp1[i-1], dp1[i-2] + arr1[i]);
dp2[i] = max(dp2[i-1], dp2[i-2] + arr2[i]);
}
return max(dp1[arr1.size() - 1], dp2[arr1.size() - 1]);
}
};
探讨了在首尾相连的物品中,如何通过动态规划(DP)算法选择不相邻物品以达到价值最大化的解决方案。文章详细介绍了将问题分解为两部分并分别进行DP处理的思路,最终比较两个结果返回较大值。
422

被折叠的 条评论
为什么被折叠?



