
附上代码:
#include <bits/stdc++.h>
using namespace std;
__int128 vis[505][505];
__int128 dfs(int n,int m){
if(vis[n][m])return vis[n][m];
if(n==0||n==1||m==1)return vis[n][m]=1;
if(n<m)return vis[n][m]=dfs(n-m,m);
else return vis[n][m]=dfs(n,m-1)+dfs(n-m,m);
}
void write(__int128 ans){
if(ans==0)return;
write(ans/10);
int k=ans%10;
cout<<k;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n,m;
cin>>n>>m;
int r=n/m;
__int128 ans=0;
for(int i=1;i<=r;i++){
int res=n-m*i;
if(res==0){
ans++;
}else{
ans+=dfs(res,i);
}
}
write(ans);
return 0;
}