```cpp
#include <cstdio>
#include <iostream>
#include <cstring>
#include <string>
#include <cmath>
#include <cstdlib>
#include <algorithm>
using namespace std;
int a[10001]={1},n,total;
int print(int t){
cout<<n<<"=";
for(int i=1;i<=t-1;i++)
cout<<a[i]<<"+";
cout<<a[t]<<endl;
total++;
}
int search(int s,int t){
int i;
for(int i=a[t-1];i<=s;i++)
if(i<n){
a[t]=i;
s-=i;
if(s==0)print(t);
else search(s,t+1);
s+=i;
}
}
int main(){
scanf("%d",&n);
search(n,1);
printf("total=%d",total);
cout<<endl;
return 0;
}
```
不用谢我,total就是你要的,但是你要对程序稍稍修改一下。
by I_FUCK_CM @ 2017-09-03 15:18:47
@[风吹花落如雨](/space/show?uid=43606) 没人说要谢你,~~自不自恋~~?!
by 倾城ファン恋 @ 2018-04-11 23:19:19
@[寻鸢](/space/show?uid=48187) 还是乖乖回溯吧,或者数据小的话就打表
by 月落落落 @ 2018-11-07 14:00:51
O(1)算法他不香吗?
by cjZYZtcl @ 2020-07-20 11:08:17