Haz una selección de k-pasos. Como no se puede repetir, el número seleccionado no debe disminuir monótonamente, y el rango del número que se puede seleccionar en cada paso es el número del paso anterior~n
dfs(índice,suma,elección): La elección del índice-1 se ha hecho, y la suma es suma, la elección del paso anterior es elección
si (suma> n) devuelve;
si (índice == k + 1) {
si(suma==n){res++};retorno;}
#include<iostream>
using namespace std;
int n;
int k;
int res=0;
void dfs(int index,int sum,int choice){
if(sum>n)return;
if(index==k+1){
if(sum==n){
res++;
}
return;
}
for(int i=choice;i<=n;i++)
dfs(index+1,sum+i,i);
}
int main(){
cin>>n>>k;
dfs(1,0,1);
cout<<res;
}