问题 G: 【贪心】最大乘积

时间限制: 1 Sec  内存限制: 128 MB
提交: 34  解决: 10
[提交][状态][讨论版]

题目描述

 一个正整数一般可以分为几个互不相同的自然数的和,如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
思路:要求乘积最大,就得让每一个数尽量地接近,从2,开始分,最后剩下的数依次从后面加到前面的数上面(每个数加上1)。例如10,分开后是2,3,4,剩下1,加到最后面的4上成2,3,5.如果是18,依次是2,3,4,5剩下4,依次加到前面的数上是3,4,5,6.
代码:
import java.math.BigInteger;
import java.util.Scanner; public class Main { public static void main(String[] args) {
Scanner scc=new Scanner(System.in);
BigInteger big1=new BigInteger("1");
int a[]=new int[3000];
int n;
int sum=2;
a[0]=2;
n=scc.nextInt();
int i=1;
int j=0;
while(true){
a[i]=a[i-1]+1;
if(sum+a[i]>n){
break;
}else{
sum+=a[i];
}
i++;
}
a[i]=n-sum;
j=i-1;
while(a[i]!=0&&j>=0){
a[j]++;
a[i]--;
j--;
}
j=i-1;
while(a[i]!=0&&j>=0){
a[j]++;
a[i]--;
j--;
}
for(int k=0;k<i-1;k++){
System.out.print(a[k]+" ");
big1=big1.multiply(BigInteger.valueOf(a[k]));
}
System.out.println(a[i-1]);
big1=big1.multiply(BigInteger.valueOf(a[i-1]));
System.out.println(big1.toString()); } }
 

【贪心】最大乘积-贪心-高精度-java的更多相关文章

  1. UVA 10382 - Watering Grass【贪心+区间覆盖问题+高精度】

    UVa 10382 - Watering Grass n sprinklers are installed in a horizontal strip of grass l meters long a ...

  2. 【贪心科技】贪心科技内容合伙人关于AI公司及创业的演讲笔记

    贪心科技内容合伙人关于AI公司及创业的演讲笔记 视频 目录 一.投资角度对 AI 的两个基本认知 二.简单分析 AI 公司的两个纬度四个层面 三.AI 垂直行业应用的三点中美对比 四.给创业者的四个建 ...

  3. hdoj 1002 A + B Problem II 高精度 java

    A + B Problem II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  4. HDU 6206 Apple【计算几何+高精度Java】

    Problem Description Apple is Taotao's favourite fruit. In his backyard, there are three apple trees ...

  5. caioj 1067动态规划入门(一维一边推5: 乘积最大(高精度版))

    因为这里涉及到乘号的个数,那么我们可以用f[i][j]表示前i个位乘号为j个时的最大乘积 那么相比上一题就是多了一层枚举多少个乘号的循环,可以得出 f[i][r] = max(f[j - 1][r - ...

  6. 高精度 java的一些题

    poj 1001 Exponentiation import java.util.*; import java.math.*; public class Main { public static vo ...

  7. leetcode 152. 乘积最大子序列 java

    题目: 给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数). 示例 1: 输入: [2,3,-2,4] 输出: 6 解释: 子数组 [2,3] 有最大乘积 6. ...

  8. hdoj 1753 大明A+B 高精度/java

    大明A+B Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  9. 算法笔记_133:最大连续乘积子数组(Java)

    目录 1 问题描述 2 解决方案 2.1 蛮力法 2.2 动态规划法   1 问题描述 给定一个浮点数组,任意取出数组中的若干个连续的数相乘,请找出其中乘积最大的子数组. 2 解决方案 2.1 蛮力法 ...

随机推荐

  1. 16.(转) Android之Support v4、v7、v13的区别和应用场景

    我们在项目中经常会碰到Android Support v4.v7和v13包兼容问题,所以有必要梳理下这些东西. google提供了Android Support Library package 系列的 ...

  2. CodeForces 559C Gerald and Giant Chess

    C. Gerald and Giant Chess time limit per test 2 seconds memory limit per test 256 megabytes input st ...

  3. javascript设计模式-装饰模式

    装饰模式:在不改变原类(对象)和继承的情况下动态扩展对象功能,通过包装一个对象来实现一个新的具有原对象相同接口的新的对象.在设计原则中,有一条,多用组合,少用继承,装饰模式正是这一原则的体现. UML ...

  4. Chrome浏览器插件

    Chrome 布局 1. 修改Chrome Dock side Chrome 更多工具 -> 开发者工具 -> Customsize and Control Dev Tools

  5. crossdomain.xml的配置详解

    目录 1 简介 2 crossdomain.xml的配置详解 3 总结 1 简介 flash在跨域时唯一的限制策略就是crossdomain.xml文件,该文件限制了flash是否可以跨域读写数据以及 ...

  6. Python socket编程之二:【struct.pack】&【struct.unpack】

    import struct """通过 socket 的 send 和 recv 只能传输 str 格式的数据""" "" ...

  7. tableView左滑删除功能

    实现三个代理方法即可 -(NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtI ...

  8. 【MVC5】ASP.NET MVC 项目笔记汇总

    ASP.NET MVC 5 + EntityFramework 6 + MySql 先写下列表,之后慢慢补上~ 对MySql数据库使用EntityFramework 使用域用户登录+记住我 画面多按钮 ...

  9. C语言之参数传递

    学了四年的计算机,一直让自己比较苦恼的问题是C语言的参数传递问题,之所以说是苦恼,是因为在某年的一个学期,不幸接触到数据结构,光一个链表就把自己弄得死去活来的,而且自已一直就楞以为在操作的过程中,传递 ...

  10. Enterprise Library系列文章目录(转载)

    1. Microsoft Enterprise Library 5.0 系列(一) Caching Application Block (初级) 2. Microsoft Enterprise Lib ...