真丟人,這道題一看就很簡單,我沒做出來?我一直糾結在遞歸要不要用個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;
}