poj--3273 Monthly Expense(最小化最大值)
来源:互联网 发布:linux grep查找字符串 编辑:程序博客网 时间:2024/05/18 10:25
Monthly Expense
题意
有N个整数构成的数组,将其分成连续的m段区间,使得每段区间之和的最大值最小,求这个最小值。
题解
最小化最大值的问题,即最大值有个下界,不会有比其更小的最大值。
这类问题常使用二分搜索解决。
#include <iostream>#include <cstdio>#include <algorithm>using namespace std;const int maxn = 100000 + 3;int n, m;int a[maxn];// Complexity: O(nlog(upper - lower))int binarySearch(int lower, int upper){ while(lower <= upper){ int mid = lower + ((upper - lower) >> 1); int sum = 0, cnt = 1; for(int i = 0; i < n; ++i){ if(sum + a[i] <= mid) sum += a[i]; else sum = a[i], cnt++; }// printf("lower: %d upper: %d\n", lower, upper);// printf("mid: %d cnt: %d\n", mid, cnt); if(cnt > m) lower = mid + 1; else upper = mid - 1; } return lower;}int main(){#ifdef EXMYfreopen("data.in", "r", stdin);#endif // EXMY while(scanf("%d %d", &n, &m) != EOF){ int upper = 0, lower = 0; for(int i = 0; i < n; ++i){ scanf("%d", a + i); upper += a[i]; lower = max(lower, a[i]); } printf("%d\n", binarySearch(lower, upper)); } return 0;}
0 0
- POJ 3273 Monthly Expense (二分,最小化最大值)
- poj 3273- Monthly Expense(最大值最小化)-二分
- poj--3273 Monthly Expense(最小化最大值)
- poj Monthly Expense(最大值最小化)
- poj 3273 Monthly Expense (二分搜索,最小化最大值)
- POJ - 3273 Monthly Expense(二分搜索:最小化最大值)
- [ACM] POJ 3273 Monthly Expense (二分解决最小化最大值)
- poj 3273 Monthly Expense (二分最小化最大值)
- [ACM] POJ 3273 Monthly Expense (二分解决最小化最大值)
- POJ 3273 Monthly Expense【二分】(最大值最小化)
- POJ 3273 Monthly Expense(二分 最小化最大值)
- POJ 3273 Monthly Expense(二分,最大值最小化)
- POJ3273-Monthly Expense (最小化最大值)
- POJ 3273 Monthly Expense 最大值最小 二分法
- (最小化最大值)poj3273,Monthly Expense
- Monthly Expense poj3273 (二分/最大值最小化)
- Monthly Expense (最大值最小化+二分法)
- POJ 3273-Monthly Expense(二分法-最小化最高花费)
- Yocto i.MX6 (TQIMX6) (03) : wifi网卡的相关工具wpa_supplicant与dhcp
- 【干货】5步搞定android混淆
- 12章 一T
- delphi三层架构
- android eclipsed下载 安装
- poj--3273 Monthly Expense(最小化最大值)
- POJ 3050 Hopscotch
- DRUID连接池的使用
- 数据结构之拓补排序
- 数据挖掘学习笔记1_Apriori
- oracle数据库操作问题集1:数据库读/更新/插入
- Strusts2装饰器
- Android Studio 在Mac平台上面常用的部分快捷键
- 设计模式之观察者模式