DFS
https://pintia.cn/problem-sets/14/problems/2990
#include <cstdio>
#include <iostream>
#include <cmath>
#include <algorithm>
#include <string.h>
using namespace std;
int N;
int arr[31];
int timecntt = 0;
void output(int cnt) {
timecntt++;
if (timecntt != 1) {
printf(";");
}
printf("%d=", N);
for(int i = 0; i < cnt - 1; i++)
printf("%d+", arr[i]);
printf("%d", arr[cnt - 1]);
if (timecntt == 4) {
printf("\n");
timecntt = 0;
}
}
void re(int bign, int num, int cnt) {
if (num == 0)
output(cnt);
for(int i = 1; i <= N; i++) {
if (i >= bign && num - i >= 0) {
arr[cnt] = i;
re(max(bign, i), num - i, cnt + 1);//recursion
}
}
}
int main() {
scanf("%d", &N);
re(0, N, 0);
return 0;
}