题解 | #不相邻取数#

不相邻取数

http://www.nowcoder.com/practice/a2be806a0e5747a088670f5dc62cfa1e

不相邻取数

难度:2星

dp[i][0]dp[i][0] 为不取第 ii 个数的情况下,前 ii 个数不相邻取数的最大值;dp[i][1]dp[i][1] 为取第 ii 个数的情况下,前 ii 个数不相邻取数的最大值。那么有转移方程:

不取当前数,那么前一个数取不取都行:

dp[i][0]=max(dp[i1][1],dp[i1][0])dp[i][0]=max(dp[i-1][1],dp[i-1][0])

若取当前数,那么前一个数一定不能取:

dp[i][1]=dp[i1][0]+a[i]dp[i][1]=dp[i-1][0]+a[i]

最后需要输出 max(dp[n][0],dp[n][1])max(dp[n][0],dp[n][1])

#include<bits/stdc++.h>
using namespace std;
long long a[101010],dp[101010][2];
int main(){
    int n,i;
    cin>>n;
    for(i=1;i<=n;i++)cin>>a[i];
    for(i=1;i<=n;i++){
        dp[i][0]=max(dp[i-1][0],dp[i-1][1]);
        dp[i][1]=dp[i-1][0]+a[i];
    }
    cout<<max(dp[n][0],dp[n][1]);
}
全部评论

相关推荐

点赞 评论 收藏
分享
05-12 17:00
门头沟学院 Java
king122:你的项目描述至少要分点呀,要实习的话,你的描述可以使用什么技术,实现了什么难点,达成了哪些数字指标,这个数字指标尽量是真实的,这样面试应该会多很多,就这样自己包装一下,包装不好可以找我,我有几个大厂最近做过的实习项目也可以包装一下
点赞 评论 收藏
分享
评论
9
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务