二分找最大中最小,最小中最大

题意:一个连续N个数的数组,将它分割为连续的m段,m段中每段的和中有一个最大值,现在使最大值最小:

#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
const int maxn=100010;
int money[maxn];
int n,m;

int main()
{
    scanf("%d%d",&n,&m);
    int left=-1,right=0;
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&money[i]);
        if(left<money[i])
            left=money[i];
        right+=money[i];
    }
    while(left<right)
    {
        int mid=(left+right)/2;
        int cnt=0;
        int cost=0;
        for(int i=1;i<=n;i++)
        {
            if(cost+money[i]>mid)
            {
                cnt++;//划分区间,不包括当前的money[i]
                cost=money[i];
            }
            else
                cost+=money[i];
        }
        cnt++;//最后一个cost值也要占一天
        if(cnt<=m)
            right=mid;
        else
            left=mid+1;
    }
    cout<<right<<endl;
    return 0;
}

相反的使 最小值最大:

#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
const int maxn = 100010;
int money[maxn];
int n, m;

int main()
{
    scanf("%d%d", &n, &m);
    int left = -1, right = 0;
    for (int i = 1; i <= n; i++)
    {
        scanf("%d", &money[i]);
        if (left<money[i])
            left = money[i];
        right += money[i];
    }
    while (left<right)
    {
        int mid = (left + right) >>1;
        int cnt = 0;
        int cost = 0;
        for (int i = 1; i <= n; i++)
        {
            if (cost + money[i]>=mid)
            {
                cnt++;//划分区间,不包括当前的money[i]
                cost = 0;
            }
            else
                cost += money[i];
        }
        if (cnt < m)
            right = mid;
        else
            left = mid + 1;
    }
    cout << right-1 << endl;
    return 0;
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 8,455评论 0 4
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,324评论 19 139
  • 我是日记星球253号星宝宝~左素骊,这是我的第59篇原创日记。 爱与恨 爱和恨交织成一首歌 爱也匆匆,恨也匆匆 爱...
    素骊阅读 2,361评论 0 0
  • 除了自家的猫,还曾有只猫让我印象深刻。 那时我家有一只极聪明乖巧爱干净的奶牛猫,虽刚从姥姥家拿来时脸像个媒婆,长大...
    某花草阅读 2,726评论 0 2
  • 我们先简单了解一下,加速计可以用来干嘛。我们下次有时间再继续讲解陀螺仪的使用,以下,我们只能使用真机测试,系统提供...
    Raybon_lee阅读 9,856评论 2 10