[关闭]
@LIUHUAN 2019-05-23T23:14:19.000000Z 字数 1473 阅读 773

数组相关动态规划

algorithm


偷东西

思路1

  1. int rob(vector<int>& nums) {
  2. int n = nums.size();
  3. if(n == 0 )
  4. return 0;
  5. vector<int> dp(n + 1,0); // dp[n]才是结果
  6. dp[1] = nums[0]; // 方便计算
  7. for(int i = 2; i <= n; i++ ) {
  8. dp[i] = max( dp[i-2] + nums[i-1], dp[i-1]);
  9. }
  10. return dp[n];
  11. }

偷东西2

思路1

  1. int rob(vector<int>& nums) {
  2. int n = nums.size();
  3. if(n <= 0)
  4. return 0;
  5. if(n <= 1)
  6. return nums[0];
  7. vector<int> dp(n + 1, 0);
  8. dp[1] = nums[0]; //
  9. for(int i = 2; i < n; i++ ) {
  10. dp[i] = max(dp[i-1], dp[i-2] + nums[i-1]);
  11. }
  12. int maxv = dp[n-1];
  13. dp[1] = 0;// 不选择a[0]
  14. for(int i = 2; i <= n; i++ ) {
  15. dp[i] = max(dp[i-1],dp[i-2] + nums[i-1]);
  16. }
  17. maxv = max(maxv ,dp[n]);
  18. return maxv;
  19. }

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注