四、动态规划

4.1线性dp

还记得斐波那契数列吗?(是的,我又回来了)
可以用数组来记录前面斐波那契数列的值,以此推出后面的值。

feb[0]=feb[1]=1;
for(int i=2;i<=n;i++){
feb[i]=feb[i-1]+feb[i-2];
}

这即是动态规划的思想:利用已有的结果以及递推方程来推出整体结果。

还有一种变种的线性dp,当数组中某个数选或不选对后面的结果都有影响时,那么可以把选或不选作为两种状态:
例如:求数组中取一些数要求取的数不能出现相邻,求取的数之和的最大值:

int dp[200020][2];    //dp[i][0]代表不取第i个数的最大值,dp[i][1]则代表取其的最大值
for(int i=1;i<=n;i++){
dp[i][0]=max(dp[i-1][0],dp[i-1][1]);    //若不取a[i],那么前一个数取不取都可以
dp[i][1]=dp[i-1][0]+a[i];          //取a[i]必须要求前一个数不能取
}
cout<<max(dp[n][0],dp[n][1]);      //最后要返回的是取/不取最后一个数-这两种情况
//

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

技术岗必备:笔面试算法 文章被收录于专栏

<p> 本专刊由牛客官方团队打造 </p> <p> 算法作为技术岗位必会的内容,在笔面试中的重要性越来越高,但有很多同学对于算法怎么学习,怎么刷题以及如何自己调试依然一无所知<span></span> </p> <p> 牛客官方团队打造了本书内容帮助大家了解校招算法套路增强通过概率,为校招保驾护航 </p>

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-07 18:05
点赞 评论 收藏
分享
06-20 17:42
东华大学 Java
凉风落木楚山秋:要是在2015,你这简历还可以月入十万,可惜现在是2025,已经跟不上版本了
我的简历长这样
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-03 17:37
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务