[búsqueda primero en profundidad] división de enteros

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;
}

Supongo que te gusta

Origin blog.csdn.net/m0_52043808/article/details/123943279
Recomendado
Clasificación