爬楼梯进阶

题目

将原来的只爬1、2阶台阶改成1 ~ m台阶,那么爬上n阶台阶有多少种方法
其实,原来的爬楼梯不就看成非纯完全背包问题,
因为总共有两个物体,一阶和二阶,一阶台阶有很多,二阶台阶,每一次可以选择其中一个物体,背包的大小是n,装够n需要多少种犯方法

代码

int method(int m, int n) {
   //分类,属于非纯完全背包问题
   //一阶,二阶,三阶。。。。m阶可以重复选择,背包大小是n,求的是方法数
   //dp数组的含义,dp[j]表示的是爬到j阶台阶的方法数
   //dp数组的递推公式,dp[j] += dp[j - i]

   vector<int> dp(n + 1, 0);
   dp[0] = 1;
   //因为求的是排列数量,所以先遍历背包,又因为是完全背包问题,所以遍历背包的时候是正序的

   for(int j = 0; j <= n; j++) {
      for (int i = 0; i <= m; i++) {
         if(j - i >= 0) {
            dp[j] += dp[j - i];
         }
      }
   }
   return dp[n];
}
posted @ 2023-07-07 16:03  铜锣湾陈昊男  阅读(9)  评论(0)    收藏  举报