又是一道我不会的题……(最大乘只因)

一个正整数一般可以分为几个互不相同的自然数的和,如3=1+2,4=1+3,5=1+4=2+3,6=1+5=2+4,…。

现在你的任务是将指定的正整数n分解成若干个互不相同的自然数的和,且使这些自然数的乘积最大。

输入

只一个正整数n,(3≤n≤10000)。

输出

第一行是分解方案,相邻的数之间用一个空格分开,并且按由小到大的顺序。

第二行是最大的乘积。

样例

10

2 3 5
30

奇葩(n>2)(n<10001);
没想到深搜一分拿不到 :poop:

而我除了深搜啥也不会……

#include<bits/stdc++.h>
using namespace std;
int n,vis[10005],cs=1,maxans=INT_MIN;
int ans[10005];
void dfs(int id,int sam){
	if(id>n){
		return;
	}
	if(id==n){
		if(maxans<sam){
			memset(ans,0,sizeof ans);
			maxans=sam;
			cs=1;
			for(int i=1;i<n;i++){
				if(vis[i]==1){
					ans[cs]=i;
					cs++;
				}
			}
		}
		return;
	}
	else{
		for(int i=1;i<n;i++){
			if(vis[i]!=1){
				vis[i]=1;
				dfs(id+i,sam*i);
				vis[i]=0;
			}
		}
	}
}
int main(){
	cin>>n;
	dfs(0,1);
	for(int i=1;i<cs;i++){
		printf("%d",ans[i]);
		cout<<' ';
	}
	cout<<'\n';
	cout<<maxans;
}

呵呵;
跪求大佬……
大大们的集训应该结束了吧( ⊙ o ⊙ )