模板【二分】

PART1(算法思想简介)

1.实现

2.时间复杂度

3.特别优势

4.适用情况

5.需要注意的点

6.函数、变量名的解释+英文

7.dalao分析

PART2(算法各种类型(并附上代码))

 

#include <iostream>
using namespace std;
const int N = 1e3 + 9;
const int inf = 0x3f3f3f3f;
int n, k, a[N];
bool Check(int x)
{
    int now = 0, cnt = 0;
    for(int i = 0; i < n; i++)
    {
        if(now + a[i] > x)
        {
            ++cnt;
            now = a[i];
        }
        else
        {
            now += a[i];
        }
    }
    return cnt <= k;
}

int BinarySearch(int l, int r)  //找到满足条件的最小值
{
    while(l < r)
    {
        mid_;
        if(Check(mid))
        {
            r = mid;//(找到最大值和这个是不一样的写法)
        }
        else
        {
            l = mid + 1;
        }
    }
    return l;
}
/*
下面这种写法也是可以的,而且更快
int BinarySearch(int l, int r)  //找到满足条件的最小值
{
    while(l <= r)
    {
        mid_;
        if(Check(mid))
        {
            r = mid-1;//(找到最大值和这个是不一样的写法)
        }
        else
        {
            l = mid + 1;
        }
    }
    return l;
}
*/
int main() { int ma = -inf, sum = 0; cin >> n >> k; for(int i = 0; i < n; i++) { cin >> a[i]; ma = max(ma, a[i]); sum += a[i]; } cout << BinarySearch(ma, sum) << endl; return 0; }

 

PART3(算法的延伸应用)

 

PART4(对算法深度的理解)

 

PART5(与其相关的有趣题目)

 

好文要顶 关注我 收藏该文

posted @ 2021-07-23 10:44  bear_xin  阅读(31)  评论(0编辑  收藏  举报