【贪心】 poj 1032 和为n的若干数最大乘积

时间:2024-01-10 18:02:50

给出n,把n分解为若干不相同数之和,使之乘积最大。
贪心,Discuss里面的思路:把n分解为从2开始的连续整数,如果有多,则从高位开始依次加1。如26,我们得到2+3+4+5+6,此时还剩余6(26-2-3-4-5-6),接下来从高位依次加一,变成3+4+5+6+7,还剩1,继续加给最大的7,最后答案是3+4+5+6+8

#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
// freopen("in.txt","r",stdin);
int m,s=,cnt=,i,sum,j;
cin >> m;
for(i=;;i++)
{
s+=i;
cnt++;
if(s>m)
{
s=s-i; //
i--; //
cnt--; //
break;
}
}
// cout << s << endl;
// cout << i << endl;
// cout << cnt << endl;
s=m-((i)*(i+)*0.5-);
// cout << s << endl;
sum=s/cnt; //
if(sum>)
{
s=s-sum*cnt; //
}
// cout << sum << endl;
// cout << s << endl;
cout << (+sum);
for(j=;j<=i-s;j++)
{
cout << ' ' << (j+sum);
}
for(j=i-s+;j<=i;j++)
{
cout << ' ' << (j+sum+);
}
return ;
}