一个正整数一般可以分为几个互不相同的自然数的和,如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);
没想到深搜一分拿不到 ![]()
而我除了深搜啥也不会……
#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 ⊙ )