状
态
表
示
:
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[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);
当 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
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。