美文网首页程序员
枚举算法作业(一)

枚举算法作业(一)

作者: 续袁 | 来源:发表于2018-09-25 19:36 被阅读64次

    时间限制 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;
    }
    

    相关文章

      网友评论

        本文标题:枚举算法作业(一)

        本文链接:https://www.haomeiwen.com/subject/bzaloftx.html