动态规划的五部曲

什么叫动态规划?动态规划是运筹学的一个分支,是求解决策过程最优化的过程。简单来说,就是在当前状态下的最优解。

第一步:确定dp的含义

第二步:推导动态转移方程

第三步:dp的初始化

第四步:遍历顺序

第五步:打印表格

每一个动态规划题目都是围绕着这五部来的,只要每次把这五步弄清楚,相信动态规划不难。

都说动态规划最重要的是找到动态转移方程,其实初始化也同样重要,没有一个好的初始化,后面的dp也很难进行。等做到后面动态转移方程就那几个。

毕竟是初讲,我就来讲讲动态规划的入门,菲布拉契数列。

最经典的题目爬楼梯

51ae931fe137407ca243d1635142e47c.jpg

 #include<iostream>

using namespace std;

#include<vector>

int main()

{

 int n;

 cin >> n;

 vector<int>dp(n + 1);//dp[i]的含义是到达第i阶楼梯的次数

 dp[1] = 1;//dp数组的初始化

 dp[2] = 2;

 for (int i = 3; i <= n; i++)

 {

  dp[i] = dp[i - 1] + dp[i - 2];//只分析第i个的状态,(i-2)的次数跳两阶楼梯加上(i-1)的次数跳一阶楼梯就是跳到i的楼梯的次数

  //同时也很容易看到这个遍历顺序是从前向后

 }

 //最后一步 打印表对照猜想

 for (int i = 1; i <= n; i++)

 {

  cout << dp[i] << " ";

 }

return 0;

}

五步法完成

可以感到这个题很简单

为什么?因为动态转移方程很简单 初始化很简单 遍历顺序也很简单所以这个题很简单

下次给大家介绍一下dp的所有类型的题目

并且会以五步曲来给大家讲解有什么问题可以私信我。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值