2 条题解

  • 2
    @ 2023-10-29 0:07:45
    #include<iostream>
    using namespace std;
    int a[50]={0},k=1,sum=0;
    void f(int x){
    	if(x==0){//每轮拆分结束,输出方案并计数
    		for(int i=1;i<k-1;i++)
    		cout<<a[i]<<'+';
    		cout<<a[k-1]<<endl;
    		sum++;
    		return;
    	}
    	for(int i=a[k-1];i<=x;i++){//以拆分序列的末尾元素a[k-1]为搜索起点,避免拆分重复
    		a[k++]=i;//拆分,入栈
    		f(x-i);//进入下一层拆分
    		k--;//弹出栈顶元素
    	}
    }
    int main(){
    	int n;
    	a[0]=1;//第一次拆分为空栈,初始化搜索起点
    	cin>>n;
    	f(n);//回溯搜索
    	cout<<"total="<<sum;
    	return 0;
    }
    

    信息

    ID
    420
    时间
    1000ms
    内存
    256MiB
    难度
    4
    标签
    递交数
    62
    已通过
    28
    上传者