LeetCode 2786. 访问数组中的位置使分数最大(动态规划dp)

2786. 访问数组中的位置使分数最大

在这里插入图片描述
思路:动态规划dp。假设现在我们最后跳的一个点为i,那么我们需要知道区间[0,i-1]中:成立的最后一跳nums[j]为偶数的最大得分、成立的最后一跳nums[j]为奇数的最大得分。这样我们就可以更新nums[i]所对应的奇数还是偶数的最大得分。

class Solution {
public:
    long long maxScore(vector<int>& nums, int x) {
        int n=nums.size();
        //a[0]表示最后一跳为偶数的最大得分
        //a[1]表示最后一跳为奇数的最大得分
        //初始化为一个非常大的负数,表示不符合的情况
        long long a[2]={LONG_LONG_MIN/2,LONG_LONG_MIN/2};
        a[nums[0]%2]=nums[0];
        long long mx=nums[0];
        for(int i=1;i<n;i++){
        	//上一跳为相同奇偶性
            a[nums[i]%2]+=nums[i];
            //上一跳为不相同奇偶性
            a[nums[i]%2]=max(a[nums[i]%2],a[(nums[i]%2+1)%2]+nums[i]-x);
            mx=max(mx,a[nums[i]%2]);
        }
        return mx;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值