UPC-最优分解问题(贪心)

简介: UPC-最优分解问题(贪心)

最优分解问题

时间限制: 1 Sec 内存限制: 128 MB

[提交] [状态]

题目描述

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

输入

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

输出

计算出的最大乘积。

样例输入 Copy

10

样例输出 Copy

30


具体证明:传送门


贪心的思想,和一定时,如果两个数差值越小,乘积就越大(好像是个数学公式?)

所以从2开始枚举,累加和为sum,直到sum+i>n时停止

可能会有剩下的值,从后向前依次将该数加1即可。

重点是特判

当n=1时,可以拆成1和0,答案为0。

当n=2时,只能拆成2和0,答案为0。

因为要求拆出来的正整数不相同,所以1和1不可行

当n=3时,可以拆成1和2,答案为2。

当n>=4时,开始枚举即可。


坑点就是n=2。。

#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
int main(){
    int n;cin>>n;
    if(n<=4){
        if(n==2) cout<<0<<endl;
        else
        cout<<max(n-1,0)<<endl;
        return 0;
    }
    vector<int>v;
    int sum=0;
    for(int i=2;i<=n;i++){
        if(sum+i<=n) v.push_back(i),sum+=i;
        else break;
    }
    int tmp=n-sum;
    ll res=1;
   /// cout<<tmp<<endl;
   /// cout<<v.size()<<endl;
    for(int i=v.size()-1;i>=0;i--){
        if(tmp>0) v[i]++,tmp--;
        else break;
    }
    int ans=0;
    for(auto tt:v){
        ///cout<<tt<<" ";
        res*=tt;
        ans+=tt;
    }
    cout<<res<<endl;
   /// cout<<ans<<endl;
    return 0;
}

补来自学长的证明:

a+b=c

b=c-a

ab=(c-a)a=ac-aa

对称轴 a=c/2

根据一元二次方程a取 对称轴左右时最大

从而将问题从两个数转换到三个数

至多个数

目录
相关文章
|
6月前
|
Linux
在Linux中,如何查看当前日期和时间?
在Linux中,如何查看当前日期和时间?
|
设计模式 Java 关系型数据库
软件设计原则-开闭原则讲解以及代码示例
开闭原则(Open-Closed Principle,OCP)是面向对象设计中的一条重要原则,它由Bertrand Meyer在其著作《面向对象软件构造》中提出,并成为SOLID原则之一。 开闭原则的核心思想是:软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。简单来说,就是在不修改已有代码的情况下,通过扩展来实现新的功能或变化。
537 0
|
存储 索引
顺序表和链表的优缺点总结
顺序表和链表的优缺点总结
1289 0
|
8月前
|
安全 关系型数据库 MySQL
MySQL数据库——视图的更新、视图作用以及案例
MySQL数据库——视图的更新、视图作用以及案例
405 0
|
7月前
|
机器学习/深度学习 自然语言处理 算法
未来语音交互新纪元:FunAudioLLM技术揭秘与深度评测
人类自古以来便致力于研究自身并尝试模仿,早在2000多年前的《列子·汤问》中,便记载了巧匠们创造出能言善舞的类人机器人的传说。
12550 116
|
C++
C++第13周项目4 - 多重继承出日期时间类
课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565,本周题目链接:http://blog.csdn.net/sxhelijian/article/details/8953304 【项目4】日期时间类  定义一个日期类Date,数据成员包括年、月、日,SetDate(int y,int m,int d)和PrintDat
1283 0
|
NoSQL IDE Linux
Linux系统编程—第二节—(Centos 7)开发工具等(yum vim gcc g++ gdb make Makefile )
会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力 一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作
332 0
Linux系统编程—第二节—(Centos 7)开发工具等(yum vim gcc g++ gdb make Makefile )
|
消息中间件 架构师 Devops
SegmentFault D-Day 2015 武汉站回顾
SegmentFault D-Day 2015 武汉站 上个周末在武汉光谷创业咖啡如期进行,第一次在武汉自己举办技术沙龙,从技术讨论和嘉宾分享的内容来说,这是一场内容很丰富的沙龙。下面给就是今天分享内容的详细回顾。
397 0
SegmentFault D-Day 2015 武汉站回顾
|
9月前
|
开发者
【开发者藏宝阁】汇聚每月最新产品动态(2022年5月月刊)
【开发者藏宝阁】汇聚每月最新产品动态(2022年5月月刊)
48 0
|
数据采集 人工智能 自然语言处理
GPT大升级!它可以在哪些场景辅助数据采集?
用ChatGPT辅助数据采集,XPath、正则表达式都能写!

热门文章

最新文章