P1025 [NOIP2001 提高组] 数的划分(DFS)C/C++

在这里插入图片描述
在这里插入图片描述
DFS模拟:

#include<iostream>
using namespace std;

int n,k,road,sum=0;
int a[10];
void dfs(int step)
{
    
    
	//if(n==0)return ;
	//if(sum>n)return;
	if(step==k)
	{
    
    
		if((n-sum)>=a[k-1]){
    
    
			road++;
			//具体的分配方法 
			/*
			a[k]=n-sum;
			for(int i=1;i<=k;i++)
				cout << a[i] << " ";
			cout << endl ;*/
		}
		return;
	}
	
	for(int i=a[step-1];i<=n/(k-step+1);i++)
	{
    
    
		a[step]=i;
		sum+=i;
		dfs(step+1);
		sum-=i;
	}
		
}

int main()
{
    
    
	scanf("%d%d",&n,&k);
	a[0]=1;
	dfs(1);
	cout << road << endl ;
	return 0;
}

猜你喜欢

转载自blog.csdn.net/wangyurenwls/article/details/121511551