zoukankan      html  css  js  c++  java
  • 问题 G: 最优分解问题

     

    问题 G: 最优分解问题

    时间限制: 1 Sec  内存限制: 128 MB
    [提交] [状态]

    题目描述

    设n是一个正整数。现在要求将n分解为若干个互不相同的自然数的和,且使这些自然数的乘积最大。

    输入

    第1行是正整数n。(n不超过50)

    输出

    计算出的最大乘积。

    样例输入 Copy

    10
    

    样例输出 Copy

    30

    贪心策略:要使乘积做大,尽可能地将指定的n(n>4)拆分成从2开始的连续的自然数的和,如果最后有剩余的数,将这个剩余的数在优先考虑后面项的情况下平均分给前面的各项。
    例如: 10 = 2 + 3 + 4 + 1,然后把1加入最后一个,10 = 2 + 3 + 5
    例如:26 = 2 + 3 + 4 + 5 + 6 + 6,最后多出的6平均分配,优先最后一位,即26 = 3 + 4 + 5 + 6 + 8
    #include<bits/stdc++.h> 
    #include <math.h>
    using namespace std;
    typedef long long ll; 
    inline int read()
    {
        int x=0,f=1;char ch=getchar();
        while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
        while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
        return x*f;
    }
    const int maxn=200001;
    const int inf=0x3f3f3f3f;
    const int mod=1e9+7;
    int a[maxn];
    int n;
    int sum;
    void inint(){
        cin>>n;
        sum=n;
    }
    int main(){
        inint();
        if(n==1){
            printf("0");
            return 0;
        }
        if(n==2){
            printf("0");
            return 0;
        }
        if(n==3){
            printf("2");
            return 0;
        }
        if(n==4){
            printf("3");
            return 0;
        } 
        int p=0;
        for(int i=2;i<n;i++){
            if(sum<i){
                break;
            }
            a[p++]=i;
            sum-=i;
        }
        while(sum>0){
            for(int j=p-1;j>=0;j--){
                if(sum>0){
                    a[j]++;
                    sum--;
                }
                else{
                    break;
                }
            }
        }
        ll z=1;
        for(int i=0;i<=p-1;i++){
            z=z*a[i];
        }
        printf("%lld",z);
    }
     
  • 相关阅读:
    eclipse新建maven web项目
    mongodb启用Profiling定位问题
    Linux下系统监控工具nmon使用
    MMS(mongodb监控工具)
    Linux下定时切割Mongodb数据库日志并删除指定天数前的日志记录
    mongodb sharding集群搭建
    linux 下mongodb 3.2.5单机版安装
    linux mongodb replica set集群安装
    DOS命令查询当前文件夹中文件数量
    centos7 开放mongodb端口
  • 原文地址:https://www.cnblogs.com/lipu123/p/12828936.html
Copyright © 2011-2022 走看看