【墨鳌】【激活函数~应用】

题目链接
题解链接

解题思路

  • 引入神经网络概念:
  • 激活函数之一:ReLU(x)

\[ReLU(x)=\begin{cases}0\ (x\leq0)\\x\ (x>0)\end{cases}\iff ReLU(x)=\max(x,0) \]

  • 假设状态 \(dp(i)\) 为:
    • 当前 \(i\) 个元素,恰好选择了第 \(i\) 个元素,
    • 所组成的,最大连续子区间和的答案

转移方程

\[dp[x]=nums[i]+ReLU(dp[x-1]) \]

  • 也就是说,只要前一项满足 \(dp[x-1]\) 非负
  • 即可成为一个被激活的状态,使得原先的连续区间延长
  • 否则,相当于就此断开,重新开始一个新区间累加

代码

class Solution {
public:
    int ReLU(int&x){
        return max(x,0);
    }

    int maxSubArray(vector<int>& nums) {
        vector<int>dp(nums.size(),0);
        dp[0]=nums[0];
        for(int i=1;i<nums.size();i++)
            dp[i]=nums[i]+ReLU(dp[i-1]);
        return *max_element(begin(dp),end(dp));
    }
};
posted @ 2022-02-17 14:07  墨鳌  阅读(20)  评论(0编辑  收藏  举报