LeetCode 135分发糖果

在这里插入图片描述
状 态 表 示 : f [ i ] 表 示 第 i 个 小 朋 友 分 到 的 糖 果 状态表示:f[i]表示第i个小朋友分到的糖果 f[i]i

属 性 : m i n 属性:min min

状 态 计 算 : 状态计算:

当 a [ i ] > a [ i − 1 ] 当a[i] > a[i-1] a[i]>a[i1]
f [ i ] = m a x ( f [ i ] , f [ i − 1 ] + 1 ) ; f[i] = max(f[i],f[i-1]+1); f[i]=max(f[i],f[i1]+1);

当 a [ i ] > a [ i + 1 ] 当a[i] > a[i+1] a[i]>a[i+1]

f [ i ] = m a x ( f [ i ] , f [ i + 1 ] + 1 ) f[i] = max(f[i],f[i+1]+1) f[i]=max(f[i],f[i+1]+1)

可 以 用 记 忆 化 搜 索 来 实 现 可以用记忆化搜索来实现

class Solution {
public:
    vector<int>f;
    vector<int>s;
    int n;
    int candy(vector<int>& ratings) {
        n = ratings.size();
        s = ratings;
        f.resize(n+1, -1);
        int res = 0;
        for(int i = 0; i < ratings.size(); i++){
            res += dp(i);
        }
        return res;
    }
    int dp(int x){
        if(f[x] != -1)  return f[x];
        f[x] = 1;
        if(x && s[x] > s[x-1])  f[x] = max(f[x], dp(x-1) + 1);
        if(x + 1 < n && s[x] > s[x+1])f[x] = max(f[x], dp(x+1) + 1);
        return f[x];
    }
};

作者:陈平安
链接:https://www.acwing.com/activity/content/code/content/1944407/
来源:AcWing
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值