【poj 3273】 Monthly Expense 二分
2016-04-01 08:35
621 查看
Monthly Expense
Time Limit: 2000MS Memory Limit: 65536K
Total Submissions: 21071 Accepted: 8251
Description
Farmer John is an astounding accounting wizard and has realized he might run out of money to run the farm. He has already calculated and recorded the exact amount of money (1 ≤ moneyi ≤ 10,000) that he will need to spend each day over the next N (1 ≤ N ≤ 100,000) days.
FJ wants to create a budget for a sequential set of exactly M (1 ≤ M ≤ N) fiscal periods called “fajomonths”. Each of these fajomonths contains a set of 1 or more consecutive days. Every day is contained in exactly one fajomonth.
FJ’s goal is to arrange the fajomonths so as to minimize the expenses of the fajomonth with the highest spending and thus determine his monthly spending limit.
Input
Line 1: Two space-separated integers: N and M
Lines 2..N+1: Line i+1 contains the number of dollars Farmer John spends on the ith day
Output
Line 1: The smallest possible monthly limit Farmer John can afford to live with.
Sample Input
7 5
100
400
300
100
500
101
400
Sample Output
500
Hint
If Farmer John schedules the months so that the first two days are a month, the third and fourth are a month, and the last three are their own months, he spends at most $500 in any month. Any other method of scheduling gives a larger minimum monthly limit.
题目链接:http://poj.org/problem?id=3273
题意:给N个数,划分为M个块(不得打乱数顺序)。找到一个最好的划分方式,使得块中的最大值 最小。
思路:简单二分,o(n) 判断
代码:
Time Limit: 2000MS Memory Limit: 65536K
Total Submissions: 21071 Accepted: 8251
Description
Farmer John is an astounding accounting wizard and has realized he might run out of money to run the farm. He has already calculated and recorded the exact amount of money (1 ≤ moneyi ≤ 10,000) that he will need to spend each day over the next N (1 ≤ N ≤ 100,000) days.
FJ wants to create a budget for a sequential set of exactly M (1 ≤ M ≤ N) fiscal periods called “fajomonths”. Each of these fajomonths contains a set of 1 or more consecutive days. Every day is contained in exactly one fajomonth.
FJ’s goal is to arrange the fajomonths so as to minimize the expenses of the fajomonth with the highest spending and thus determine his monthly spending limit.
Input
Line 1: Two space-separated integers: N and M
Lines 2..N+1: Line i+1 contains the number of dollars Farmer John spends on the ith day
Output
Line 1: The smallest possible monthly limit Farmer John can afford to live with.
Sample Input
7 5
100
400
300
100
500
101
400
Sample Output
500
Hint
If Farmer John schedules the months so that the first two days are a month, the third and fourth are a month, and the last three are their own months, he spends at most $500 in any month. Any other method of scheduling gives a larger minimum monthly limit.
题目链接:http://poj.org/problem?id=3273
题意:给N个数,划分为M个块(不得打乱数顺序)。找到一个最好的划分方式,使得块中的最大值 最小。
思路:简单二分,o(n) 判断
代码:
#include<iostream> #include<stdio.h> #include<string.h> using namespace std; int n,m; int a[100005]; int h,l; bool C(int x) { int ret=0; int g=1; for(int i=1;i<=n;i++) { if(ret+a[i]<=x) ret+=a[i]; else { // cout<<" "<<g<<" "<<i<<endl; if(a[i]>x) return 0; ret=a[i]; g++; if(g>m) return 0; } } if(g<=m) return true; return false; } int main() { l=10005; h=0; scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); h+=a[i]; l=min(a[i],l); } int lx=l; int rx=h; int ans=h; while(lx<=rx) { //cout<<lx<<" "<<rx<<endl; int mid=(lx+rx)/2; if(C(mid)) { //cout<<" "<<mid<<endl; ans=min(ans,mid); rx=mid-1; } else lx=mid+1; } printf("%d\n",ans); }
相关文章推荐
- 初识WebSocket
- iOS 自定义弹出视图 几行代码可以自定义任何弹出视图
- JMeter入门合集
- Codeforces 444C DZY Loves Colors(线段树)
- 第三次作业
- 复利计算--结对1.0,做汉堡,结对2.0
- 数据库高级应用
- 为项目增加LOG4J2支持&LOG4J2使用如何增加LOG4J2中的几个必须要注意问题
- 租房子练习
- 【poj 3273】Monthly Expense 题意&题解&代码(C++)
- M1
- sokect 建立简单连接
- 高流量站点NGINX与PHP-fpm配置优化
- 学习进度条
- 云计算:利用叶子云桌面虚拟化管理平台搭建企业的桌面云,叶子云初始化(三)
- 数组 冒泡排序 打印菱形 随机生成不同的数
- 【bzoj3994】[SDOI2015]约数个数和 线性筛法+莫比乌斯反演+数论分块
- iOS开发:strong属性与weak属性的区别
- Linux Centos 搭建SFTP服务器
- [异步][事务][流程][设计]同步当场处理并返回处理结果,异步后怎样返回. 怎样解决?