《算法》枚举算法作业(一)

时间限制 1000 ms
内存限制 64 MB
题目描述
有一条河,河中间有一些石头,已知石头的数量和相邻两块石头之间的距离。现在可以移除一些石头,问最多移除m块石头后(首尾两块石头不可以移除),相邻两块石头之间的距离的最小值最大是多少。

输入数据
第一行输入两个数字,n(2<=n<=1000)为石头的个数,m(0<=m<=n-2)为可移除的石头数目 随后n-1个数字,表示顺序和相邻两块石头的距离d(d<=1000)

输出数据
输出最小距离的最大值

样例输入
4 1
1 2 3
样例输出
3

#include<stdio.h>
#include<math.h>
#include <iostream>
using namespace std;
bool binarySearch(int mid, int b[], int m, int n);
int main(){
    int m, n;
    int *a,*b;
    cin >> n >> m;
    a = (int *)malloc(sizeof(int) * (n+1)); // 分配
    b = (int *)malloc(sizeof(int) * (n+1 )); // 分配
    for (int i = 0; i<n + 1; i++)
    {
        a[i] = b[i] = 0;
    }

    for (int i = 2; i<n + 1; i++)
    {
        cin >> a[i]; // 键盘输入 n-1 个数
        b[i] = a[i] + b[i - 1];
    }
    

    int left = 0, right = b[n], mid;
    while (left<right-1){
        mid = (left + right) / 2;
        if (binarySearch(mid, b, m, n) == false){
            left = mid;
        }
        else{
            right = mid;
        }
            
    }
        
    
    cout << left << endl;

    return 0;

}

bool binarySearch(int mid ,int b[],int m,int n){

    int count = 0, sum = 0, j = 1;
    for (int i = 2; i < n + 1;) {
        int dis = b[i] - b[j];
        while (dis < mid){
            count++;
            i++;
            if (count > m){
                return true;
            }
            if (i > n){
                if (j == 1){
                    return true;
                }
                else{
                    return false;
                }
            }   
            dis = b[i] - b[j];
        }
        j = i;
        i++;
    }

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

推荐阅读更多精彩内容

  • 时间限制 1000 ms内存限制 64 MB题目描述李老师正准备暑假旅行,他有一个容量为L的行李箱和n个物品(n不...
    续袁阅读 1,454评论 0 1
  • 生活大爆炸版石头剪刀布 题目描述 石头剪刀布是常见的猜拳游戏:石头胜剪刀,剪刀胜布,布胜石头。如果两个人出拳一样,...
    bbqub阅读 485评论 0 0
  • 你记得哪天, 我与你的相遇吗? 与你分别时的心痛吗...
    浅盛夕阳阅读 189评论 0 0
  • 小蓝最近在写论文,由于要连续工作,笔记本电脑用完一般不放包里。12点左右,灯熄了,整个宿舍陷入漆黑。待听到主...
    诗霞姐姐阅读 365评论 0 3
  • 家由木头和石头组成 简单而温暖 一座家有四根柱子 一个家有四口人 我和兄长与父母亲 为伊消得人憔悴 为母消得食不寐...
    大魔魔阅读 256评论 0 7