#include<bits/stdc++.h>
using namespace std;
int main(){
int n,m;
cin>>n>>m;
vector<int> dp(33,0);
dp[0]=1;
for(int i=0;i<=n;i++){
for(int j=1;j<=m;j++){
if(i>=j)
dp[i]+=dp[i-j];
}
}
// return dp[n];
cout<<dp[n]<<endl;
}
当然注意 力扣是 核心代码模式,卡码网是ACM模式(要自己写输入和输出)
模版题,一遍过。dp数组如果初始化为INT_MAX,+1的时候就要跳过这些为最大值的了。
class Solution {
public:
int coinChange(vector<int>& coins, int amount) {
if(amount==0) return 0;
vector<int> dp(amount+1,10001);
dp[0]=0;
for(int i=0;i<coins.size();i++){
for(int j=coins[i];j<=amount;j++){
dp[j]=min(dp[j],dp[j-coins[i]]+1);
}
}
if(dp[amount]==10001) return -1;
return dp[amount];
}
};
模版题,一遍过。
class Solution {
public:
int numSquares(int n) {
vector<int> dp(n+1,10001);
dp[0]=0;
for(int i=1;i<=100;i++){
for(int j=i*i;j<=n;j++){
dp[j]=min(dp[j],dp[j-i*i]+1);
}
}
return dp[n];
}
};