动态规划DP

本文介绍了如何使用深度优先搜索(DFS)、记忆化搜索以及递推方法解决动态规划问题,以实例演示了在跳台阶、打家劫舍和数字三角形问题中的应用,旨在帮助初学者理解动态规划的基本思想和技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

前言

跳台阶

打家劫舍

数字三角形


前言

      拖鞋言:不得不说,我可真是个废物。算法从去年四月开始接触,期间一直走走停停。几乎没学到什么实在的东西。壮志凌云地报名了蓝桥杯,但到此为止却并无实际进展。接下来计划静下心来好好研究算法,并持续高质量记录学习过程。祝顺利~

        此篇文章是跟随下面视频学习的笔记。up使用 dfs暴力 --> 记忆化搜索 --> 递推 的思路来给我这种小白讲动态规划,我觉得真的很妙。推荐观看。动态规划(dp)入门 | 这tm才是入门动态规划的正确方式! | dfs记忆化搜索 | 全体起立!!_哔哩哔哩_bilibili

跳台阶

821. 跳台阶 - AcWing题库

问题:一次可以跳上1级台阶,也可以跳上2级。求该跳上一个n级的台阶总共有多少种跳法。

这个问题看似简单,其实并不那么容易理解。拖鞋起初学习裴波那契 接触它的时,也死活理解不了。

问题思路:从问题里,首先我们不难知道,如果只有一级台阶,那么只有一种方案,即只走一步。如果只有两级台阶,我们也很快分析出来只有两种方案,即直接跳两级,或是一级一级来。那么有三级台阶时,首先我们会面临一个选择。第一步,是走一级,还是走两级。如果我们第一步走一级,那么就剩下两级,这剩下的两级我们可以直接两步跨完,也可以一级一级走。“可以直接两步跨完,也可以一级一级走”这句话是不是有些熟悉,也就是只有两级台阶时,我们的处理方法。也就是说三级台阶问题可以被我们分解成一级+两级台阶问题。(此处可能依旧会有朋友不能理解,可以去看看别的文章的解释,或许慢慢就能明白了。)而四级台阶,也会面临选择。第一步是走一级,还是两级。倘若走两级,那么就剩下两级(又变成了只有两级台阶的问题)。倘若走一级,则剩下三级,是只有三级台阶的问题(而上面我们又将三级台阶,分成了一级+二级台阶的问题)。有点小饶,但此时我们可以发现有点像套娃,大问题会变成小问题,最终会有一个已知值。

使用dfs暴力算法的方法解答如下:

#include<stdio.h>
int dfs(int n)
{
	if(n==1) return 1;    //一级台阶时
	else if(n==2) return 2;    //两级台阶时
	else return dfs(n-1)+ dfs(n-2); 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值