198. 打家劫舍

真丟人,這道題一看就很簡單,我沒做出來?我一直糾結在遞歸要不要用個bool統計一下上一個元素用沒用過。師弟說過,動態規劃最難到地方在於寫出遞歸。嘖嘖嘖,第一道dp的轉化問題,藍莓,我原諒你第一次,第二次就得給我注意了哈。

#include <unordered_map>
#include <iostream>
#include <stack>
#include <string>
#include <vector>

using namespace std;

int ss(vector<int>&a, int n)
{
	if(n<0)
	  return 0;
	return max(ss(a,n-1), ss(a,n-2)+a[n]);
}
int rightmethod(vector<int>& nums)
{
	return ss(nums,nums.size()-1);
}
int testmethod(vector<int>& nums) {
	if(nums.empty())
	  return 0;
	if(1==nums.size())
	  return nums[0];
	if(2==nums.size())
	  return max(nums[0],nums[1]);

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

int main(void)
{
	int a[]={2,7,9,3,1};
	vector<int>b(begin(a),end(a));
	cout<<rightmethod(b)<<endl;
	cout<<testmethod(b)<<endl;
	return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章