杭州专业做网站公司台州专业制作网站
杭州专业做网站公司,台州专业制作网站,做网站找沈阳横纵网络,企业网站维护动态规划
思路#xff1a; 选择元素 x#xff0c;获得其点数#xff0c;删除 x 1 和 x - 1#xff0c;则其他的 x 的点数也会被获得#xff1b;可以将数组转换成一个有序 map#xff0c;key 为 x#xff0c; value 为对应所有 x 的和#xff1b;则问题转换成了不能同…动态规划
思路 选择元素 x获得其点数删除 x 1 和 x - 1则其他的 x 的点数也会被获得可以将数组转换成一个有序 mapkey 为 x value 为对应所有 x 的和则问题转换成了不能同时获得相邻两个房间的金币并能获得最大收益问题力扣198. 打家劫舍动态规划状态转移方程 dp[i] 跟之前两个状态相关可以使用滚动数组的方式减少空间复杂度 dp[i] std::max(dp[i - 2] nums[i], dp[i - 1])dp0 - dp[i - 2], dp0 dp[i - 1]dp1 - dp[i - 1], dp1 dp[i]在使用一个临时变量 tmp dp[i - 1] - dp1dp[i] | - dp1 - dp1 std::max(dp[i - 2] - dp0 nums[i], dp[i - 1] - dp1)dp[i - 1] | - dp1 - tmp
class Solution {
public:int deleteAndEarn(vectorint nums) {int maxVal 0;for (int val : nums) {maxVal std::max(maxVal, val);}std::vectorint sum(maxVal 1);for (int val : nums) {sum[val] val;}return rob(sum);}private:int rob(std::vectorint nums) {int size nums.size();if (size 0) {return 0;}if (size 1) {return nums[0];}int dp0 nums[0];int dp1 std::max(dp0, nums[1]);for (int i 2; i size; i) {int tmp dp1;dp1 std::max(dp0 nums[i], dp1);dp0 tmp;}return dp1;}
};
——————————————————————
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/89341.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!