模板【二分】
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(与其相关的有趣题目)