POJ 3723 Monthly Expense 二分
来源:互联网 发布:浙江自考网络助学平台 编辑:程序博客网 时间:2024/05/22 11:54
题意:给你n个值,要求将其划分成m部分(顺序不能打乱),如何划分使得最大部分的值最小。
题解:二分,对于每一个中间值,检测一次。
#include<cstdio>int N, M;int spend[200000];bool check ( int num ){ int i, sum, cnt = 0; for ( i = 0; i < N; ) { sum = 0; cnt++; while ( i < N && sum + spend[i] <= num ) sum += spend[i++]; if ( sum == 0 || cnt > M ) return false; } return true;}int bfind ( int left, int right ){ while ( left + 1 < right ) //防止出现left=mid的死循环 { int mid = (left+right)/2; if ( check(mid) ) right = mid; //始终保持一边是合法的 else left = mid + 1; } //因为left<=right,所以如果left是合法的那么它比right更优 if ( check(left) ) return left; else return right;}int main(){ scanf("%d%d",&N,&M); int sum = 0, ret; for ( int i = 0; i < N; i++ ) { scanf("%d",&spend[i]); sum += spend[i]; } ret = bfind ( sum / N, sum ); printf("%d\n",ret); return 0;}
- POJ 3723 Monthly Expense 二分
- poj 3273 二分 Monthly Expense
- poj 3273 二分 monthly expense
- POJ 3272 Monthly Expense 二分
- poj-3273-Monthly Expense-二分
- POJ 3273 Monthly Expense(二分)
- POJ 3273 Monthly Expense(二分)
- poj 3273 Monthly Expense (二分)
- POJ 3273 Monthly Expense (二分)
- POJ - 3273 Monthly Expense 二分
- POJ 3273 Monthly Expense(二分)
- POJ 3273:Monthly Expense(二分)
- 【POJ 3273】 Monthly Expense (二分)
- poj 3273 Monthly Expense 【二分】
- poj 3273 Monthly Expense (二分)
- POJ 3273 Monthly Expense 二分
- POJ 3273 Monthly Expense(二分)
- 【poj 3273】 Monthly Expense 二分
- linux学习之vim篇
- 穿透路由器,解决内网远程桌面等
- Oracle中利用SQL语句显示本月日历
- 技术人员管理
- 设置AlertDialog的大小位置
- POJ 3723 Monthly Expense 二分
- vitualbox ubuntu下apache服务器建立,外网访问
- 关于c++问题while(cin>>x)怎么用eof结束
- c语言知识点补遗
- [Android实例] 史上最全的Android的Tab与TabHost讲解
- 论文参考文献格式
- 设计模式之反射与配置文件
- javaWeb笔记--JSP
- Java旋转五角星