本文最后更新于600 天前,其中的信息可能已经过时,如有错误请发送邮件到tomding1065@gmail.com
1.本题是之前爬楼梯的进阶版,我们可以选择每次爬多少层,最终到达顶楼,本题同样是完全背包的思路,结合着本题需要求出的是排列,我们要先遍历背包后遍历物品的思路,(tips:注意不同题目给出的数据范围,就是要注意在for循环中的终止条件的选择,以及是否 <= >=的选取至关重要)。
CPP
#include<bits/stdc++.h>
using namespace std;
int main(){
int n, m;
cin>>n>>m;
vector<int> dp(n + 1, 0);
dp[0] = 1;
for(int i = 1; i <= n; i++){
for(int j = 1; j <= m; j++){
if(i >= j && dp[i] < INT_MAX - dp[i - j]){
dp[i] += dp[i - j];
}
}
}
cout << dp[n];
return 0;
}