传送门:p2404
题目要求:
增序输出,由于拆分一个数,所以总和确定。用dfs,每次减去一个i,搜完再回溯加回来就行。
p[ ] 记录数值
n 要拆分的数字
m 见注释
#include <cstdio>
#include <iostream>
using namespace std;
int n,p[11]={1},m;
void print(int a){
for(int i=1;i<a;i++)
cout<<p[i]<<"+";
cout<<p[a]<<endl;;
}
void dfs(int a){
for(int i=p[a-1];i<=m;i++){ //增序
if(i==n)continue; // 由于 i != n,所以需要一个m来维护剩余数字大小
p[a] = i; //记录
m-=i;
if(m==0)print(a);
else dfs(a+1);
m+=i; //回溯
}
}
int main()
{
cin>>n;
m=n; //m用于维护剩余数字大小
dfs(1);
return 0;
}