ACM算法--二分法--模板
生活随笔
收集整理的這篇文章主要介紹了
ACM算法--二分法--模板
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
// 在單調遞增序列a中查找>=x的數中最小的一個(即x或x的后繼)
while (l < r) {int mid = (l + r) / 2;if (a[mid] >= x) r = mid; else l = mid + 1;
}// 在單調遞增序列a中查找<=x的數中最大的一個(即x或x的前驅)
while (l < r) {int mid = (l + r + 1) / 2;if (a[mid] <= x) l = mid; else r = mid - 1;
}// 實數域二分,設置eps法
while (l + eps < r) {double mid = (l + r) / 2;if (calc(mid)) r = mid; else l = mid;
}// 實數域二分,規定循環次數法
for (int i = 0; i < 100; i++) {double mid = (l + r) / 2;if (calc(mid)) r = mid; else l = mid;
}// 把n本書分成m組,每組厚度之和<=size,是否可行
bool valid(int size) {int group = 1, rest = size;for (int i = 1; i <= n; i++) {if (rest >= a[i]) rest -= a[i];else group++, rest = size - a[i];}return group <= m;
}// 二分答案,判定“每組厚度之和不超過二分的值”時能否在m組內把書分完
int l = 0, r = sum_of_Ai;
while (l < r) {int mid = (l + r) / 2;if (valid(mid)) r = mid; else l = mid + 1;
}
cout << l << endl;
總結
以上是生活随笔為你收集整理的ACM算法--二分法--模板的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 『ACM-算法-二分法』信息竞赛进阶指南
- 下一篇: 『ACM-算法-枚举法』信息竞赛进阶指南