最优分解问题。
问题描述:设n是一个正整数,要求将n分解为若干互不相同的自然数之和,且这些自然数的乘积最大。
输入:正整数n
输出:计算的最大乘积。
如输入10,则输出30.
提示:若a+b=const ,则a-b的绝对值越小,ab值越大。贪心策略:将n分成从2开始的连续自然数之和,如果最后剩下一个数,则将此数在后项优先的方式下均匀地分给前面各项。
#include<iostream>
using namespace std;
int find(int n){
int i=2;
int m=1;
while(n-i>i){
m=m*i;
n=n-i;
i++;
}
return m*n;
}
int main(){
int n;
cin>>n;
cout<<find(n)<<endl;
return 0;
}