2 条题解
-
2
#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
- 上传者