爬楼梯进阶
题目
将原来的只爬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];
}

浙公网安备 33010602011771号