求解,越快愈好,特别急!!

哪位可以提供一下这个问题的解题思路,自己思考的实在没有头绪,可以让自己理解一下

img

img

代码和测试截图如下,望采纳

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<map>
using namespace std;
int n;
int f[1001],a[1001],cnt;
int main() {
    cin>>n;
    f[0]=1;
    for (int i=1;i<=n;i++) {
        for (int j=0;j<=n;j++) {
            if(j<i) continue;
            f[j]+=f[j-i];
        }
    }
    cout<<f[n]/6<<endl;
    for (int i=1;i<=n;i++)
    for (int j=i;j<=n;j++)
    for (int k=j;k<=n;k++)
    if(i+j+k==n)
    printf("%d=%d+%d+%d\n",n,i,j,k);
    return 0;
}

img