题目来源:http://poj.org/problem?id=1032

题目大意:给定一个正整数N(5<=N<=1000),将N拆为若干个不同的数使得它们的乘积最大(找到一组互不相等,和为N,乘积最大的正整数)。

输入:N

输出:选择的数,升序输出。


Sample Input

7

Sample Output

3 4

假设不考虑拆成不等的数这个条件,那么依我们的经验应该是拆成相等的数乘积最大。加上这个条件之后,就应该是相邻的数乘积最大。那么给定一个N时,我们希望能将它拆为尽可能小的连续的数。而选择的数一定不能小至1,因为乘1不改变目标值,起不到作用纯属浪费。所以最好拆到2.当从2开始的序列累加和到某个数即将超过N时,停下,将剩下的数由高位向低位每个数的值增加1.剩余的数最多会把所有的数都加了1,还剩1个,(如果剩的比这还多,在开始从2往上累加时是不会停下来的,由数列求和公式可知。)若还剩1则再加到最的数上去。

 //////////////////////////////////////////////////////////////////////////
// POJ1032 Parliament
// Memory: 280K Time: 0MS
// Language: C++ Result: Accepted
////////////////////////////////////////////////////////////////////////// #include <iostream> using namespace std; int main() {
int N;
cin >> N;
int cnt;
int sum = ;
for (cnt = ; sum + + cnt<= N; ++cnt) {
sum += ( + cnt);
}
int left = N - sum;
int p = + cnt;
while (left > ) {
--p;
--left;
}
if (p == ) {
for (int i =; i < + cnt; ++i) {
cout << i << " ";
}
cout << + cnt << endl;
} else if (p == ) {
for (int i =; i < + cnt; ++i) {
cout << i << " ";
}
cout << + cnt << endl;
} else if (p == cnt + ) {
for (int i =; i < + cnt; ++i) {
cout << i << " ";
}
cout << + cnt << endl;
} else {
for (int i =; i <= p; ++i) {
cout << i << " ";
}
for (int i = p + ; i < cnt + ; ++i) {
cout << i << " ";
}
cout << + cnt << endl;
}
system("pause");
return ;
}

最新文章

  1. python 数据类型 ----字典
  2. IO边读边写
  3. 欧拉回路(hdu3018)
  4. go语言的selector
  5. 使用国内 maven 镜像 代替国外 mirror
  6. BZOJ 1034 泡泡堂BNB 贪心+简单博弈
  7. PHP析构函数与垃圾回收
  8. nginx简单反向代理和负载均衡(ubuntu)
  9. Android 自学之帧布局 FrameLayout
  10. Django 数据库查询优化
  11. 武汉科技大学ACM:1004: 零起点学算法36——3n+1问题
  12. Linux中的段管理,bss段,data段,
  13. 开发板-PC机(宿主机)-虚拟机(VM)之间网络通信设置方法及须要注意的问题
  14. java泛型 之 入门(interface)
  15. JDBC基础学习(五)&mdash;批处理插入数据
  16. C语言之函数和字符串
  17. 【转】Python3中urllib详细使用方法(header,代理,超时,认证,异常处理)
  18. Web开发常见的几个漏洞解决方法 (转)
  19. day01计算机基础
  20. jdk8新特性(详解)

热门文章

  1. C易位构词(华师网络赛)(错排)
  2. 如何在virtualenv环境中安装指定的python版本
  3. 标准模板库(STL)学习指南之priority_queue优先队列
  4. unittest 执行测试脚本输出测试报告
  5. c++对象导出到lua
  6. java基础知识学习 java异常
  7. C#使用NPOI将DataGridView内数据写入电子表格Excel
  8. ADO.NET 对象
  9. js中的函数易忽略的点小节
  10. 树莓派 Learning 003 --- GPIO 000 --- GPIO引脚图