计蒜客——分组

题目描述: 对于一串数 numnumnum ,比如 num=[1,3,4,7,1,4,3,8]num=[1,3,4,7,1,4,3,8]num=[1,3,4,7,1,4,3,8] ,可以将数组中连续若干个数合并为一组 gig_igi 。将这串数组分成至多 kkk 组,当 k=4k = 4k=4 的时候,每组数的乘积的最大值 max(gi)\max(g_i)max(gi) 最小是多少?

输入格式

输入第一行一个整数 n,k(1≤n,k≤10000,0≤⌈nk⌉≤10)n, k (1 \le n, k \le 10000, 0 \le \lceil\frac{n}{k}\rceil \le 10)n,k(1n,k10000,0kn10)

接下来一行输入 nnn 个空格隔开的整数 li(1≤li≤9)l_i(1 \le l_i \le 9)li(1li9),表示数组中数的值。

输出格式

输出每组数的乘积的最大值最小是多少。

样例输入1
4 3

8 4 3 7
样例输出1
12

样例输入2
8 3

2 3 4 2 4 2 4 8
样例输出2
32

题目分析:分析:当k越大时,即分组越多时,max(gi)会越来越小(有时不变,但一定不会增大)。故k和max(gi)呈现负相关的关系。
方法分析:二分搜索+贪心
#include <iostream>
#include <cmath>
#define maxn 100000
using namespace std;
long long s[maxn],n;
bool guess(long long mid,long long s[],long long k)
{//最大值为mid时,k最小
    long long sum=1;
    for(int i=0;i<n;i++){//一共有k个箱子,箱子的最大容量为mid
        if(sum*s[i]>mid){//箱子装不下了,需要换下一个箱子来装
            --k;
            sum=s[i];//(等价于sum=0,sum+=s[i])
            if(s[i]>mid){//箱子装不下s[i]这件物品
                return false;
            }
        }else{
            sum*=s[i];
        }
    }
    return k>=1;//最后需要留下一个箱子装sum里的物品
}
int main()
{
    long long k;
    cin>>n>>k;
    for(int i=0;i<n;i++){
        cin>>s[i];
    }
    long long left=1;
    long long ans;
    long long right=10e10+1;//n/k<=10,查找的上界限最大只会是10e10。
    while(left<right){
        long long mid=(left+right)/2;
        if(guess(mid,s,k)){//猜测mid是符合要求的ans
            ans=mid;
            right=mid;//如果k和max(gi)是正相关的关系,则left=mid;这里是负相关的关系,所以是right=mid;
        }else{
            left=mid+1;//同上
        }
    }
    cout<<(ans)<<endl;
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
《VMware vSAN 超融合技术规划与部署》课程共分为“上集”和“下集”两部分,本套视频为“下集”部分,接续“上集”知识,是vSAN技术进阶推荐课程。  《VMware vSAN 超融合技术规划与部署》“下集”部分具体课程章节如下。  第1章 《使用延伸群集将数据存储扩展到两个站点》主要内容本章主要讲解了vSAN延伸群集的相关理论及构建vSAN延伸群集的方法。通过本章学习,您可以掌握延伸群集的设注意事项和推荐做法;掌握使用快速入门功能配置延伸群集的方法;掌握手动配置延伸群集的方法;掌握将延伸群集更改为标准群集的方法。  第2章 《vSAN延伸群集策略》主要内容本章主要讲解了vSAN延伸群集中的虚拟机存储策略。通过本章学习,您可以理解允许的故障数主要级别 (PFTT)含意;理解允许的故障数辅助级别 (SFTT)含意;通过试验进一步理解PFTT和SFTT含意;掌握将VM放置在首xuan站点和辅助站点操作过程。  第3章 《管理 vSAN 群集中的故障域》主要内容本章主要讲解了vSAN群集中的故障域相关理论和实践知识。通过本章学习,您可以了解故障域的设思想;掌握在 vSAN 群集中创建新的故障域的操作方法;掌握将主机移出故障域的操作方法;掌握将主机移至选定的故障域的操作方法;掌握重命名故障域的操作方法;掌握移除选定的故障域的操作方法。  第4章 《管理 vSAN 群集》主要内容本章主要讲解了管理vSAN群集相关知识。通过本章学习,您可以理解什么是维护模式;掌握使用维护模式的操作方法;掌握将混合 vSAN 群集迁移到全闪存群集操作方法;掌握关闭 vSAN 群集电源的方法。  第5章 《使用 vSAN iSCSI 目标服务》主要内容本章主要讲解了在vSAN环境中配置iSCSI目标服务,以把vSAN数据存储提供给外部用户使用。通过本章学习,您可以掌握vSAN iSCSI 目标服务的设思想;学会创建vSAN iSCSI 目标服务;学会使用户端连接vSAN iSCSI 目标服务;掌握vSAN iSCSI 目标服务的使用方法。  第6章 《vSAN 群集中的设备管理》主要内容本章主要讲解了vSAN 群集中的设备(缓存盘和容量盘)管理。通过本章学习,您可以学会将设备添加到磁盘组的操作方法;学会从 vSAN 移除磁盘组或设备的操作方法;学会重新创建磁盘组的操作方法;学会使用定位符 LED的操作方法;学会将设备标记为闪存的操作方法;学会将设备标记为 HDD的操作方法;学会添加容量设备的操作方法;学会从设备移除分区的操作方法。  第7章 《提高 vSAN 群集中的空间效率》主要内容本章主要讲解了提高 vSAN 群集中的空间效率相关知识。通过本章学习,您可以了解vSAN 空间效率理论知识;掌握使用去重和压缩的操作方法;了解RAID 5 或 RAID 6 删除编码;了解RAID 5 或 RAID 6 设注意事项。  第8章 《vSAN监控》主要内容本章主要讲解了vSAN监控相关知识。通过本章学习,您可以掌握监控 vSAN 群集的操作方法;掌握监控 vSAN 运行状况的操作方法;掌握监控 vSAN 性能的操作方法。  VMware vSAN 6.7 超融合技术规划与部署(上集):https://edu.csdn.net/course/detail/35188VMware vSAN 6.7 超融合技术规划与部署(下集):https://edu.csdn.net/course/detail/35191

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值