题干:

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.

题目大意:

给你一个长度为N的序列,现在需要把他们切割成M个子序列(所以每一份都是连续的),使得每个子序列和均不超过某个值X,输出X的最小值。

换句话说,切成M份,然后每一份都有一个和sum[i],其中最大的一个是maxSum = max(sum[i]),问这个最大值最小是多少?

解题报告:

刚开始读题以为要加点贪心,后来发现是要切割数组,所以是连续的,不能排序、、、白白WA一发、、

AC代码:

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#define ll long long
using namespace std;
ll sum,a[100005];
ll n,m;
bool ok(ll lim) {int cnt = 0;ll cur = 0;for(int i = 1; i<=n; i++) {if(cur + a[i] <= lim) {cur+= a[i];}else {cnt++;cur=0;i--;}}if(cnt >= m) return 0;else return 1;
}
int main()
{cin>>n>>m;for(int i = 1; i<=n; i++) scanf("%lld",a+i),sum += a[i];
//  sort(a+1,a+n+1);ll l = *max_element(a+1,a+n+1),r = sum;ll mid = (l+r)/2;while(l < r) {mid = (l+r)/2;if(ok(mid)) r=mid;else l=mid+1; }printf("%lld\n",l);return 0 ;} 

2020/1/29再做:

还是WA了一发,是因为下界写成了0,其实不能是0,因为当l为特别小的值的时候有可能被认为合法。

比如这个样例:

5 5
1 10000 3 4 5

如果你代码这么写,则会输出1

或者采用这样的方法避免修改下界。

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<stack>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define FF first
#define SS second
#define ll long long
#define pb push_back
#define pm make_pair
using namespace std;
const int MAX = 2e5 + 5;
typedef pair<int,int> PII;
int n,k,a[MAX];
bool ok(ll x) {int cnt = 1; ll cur = 0;for(int i = 1; i<=n; i++) {if(cur + a[i] <= x) cur += a[i];else {cnt ++,cur = a[i];if(cur > x) return 0;}}return cnt <= k;
}
int main()
{while(cin>>n>>k) {for(int i = 1; i<=n; i++) cin>>a[i];ll l = 0,r = 1e12,ans,mid;while(l<=r) {mid = (l+r)>>1;if(ok(mid)) r = mid - 1,ans = mid;else l = mid + 1;}printf("%lld\n",ans);     }return 0 ;
}

【POJ - 3273 】Monthly Expense (二分,最小最大值)相关推荐

  1. 二分搜索 POJ 3273 Monthly Expense

    题目传送门 1 /* 2 题意:分成m个集合,使最大的集合值(求和)最小 3 二分搜索:二分集合大小,判断能否有m个集合. 4 */ 5 #include <cstdio> 6 #incl ...

  2. POJ - 3273 Monthly Expense(二分水题)

    题目链接:点击查看 题目大意:给出n个月的花费,要求将n个月分为连续的m个部分,让每个部分加和,取m个部分中的最大值,问最大值的最小值是多少 题目分析:直接二分答案即可,也算是完全凭自己没看题解做出来 ...

  3. 【POJ 3273】 Monthly Expense (二分)

    [POJ 3273] Monthly Expense (二分) 一个农民有块地 他列了个计划表 每天要花多少钱管理 但他想用m个月来管理 就想把这个计划表切割成m个月来完毕 想知道每一个月最少花费多少 ...

  4. Monthly expense(二分)

    又又又又是二分啦 憨憨桃子又来啦 题目链接:monthly expense 题目描述: Farmer John is an astounding accounting wizard and has r ...

  5. POJ3273:Monthly Expense(二分)

    Description Farmer John is an astounding accounting wizard and has realized he might run out of mone ...

  6. USACO Monthly Expense

    洛谷 P2884 [USACO07MAR]每月的费用Monthly Expense https://www.luogu.org/problem/P2884 POJ 3273 Monthly Expen ...

  7. Monthly Expense POJ - 3273(二分最大值最小化)

    Farmer John is an astounding accounting wizard and has realized he might run out of money to run the ...

  8. Monthly Expense【二分】

    B - Monthly Expense POJ - 3273 Farmer John is an astounding accounting wizard and has realized he mi ...

  9. BZOJ 1639: [Usaco2007 Mar]Monthly Expense 月度开支( 二分答案 )

    直接二分答案然后判断. ----------------------------------------------------------------------------- #include&l ...

  10. bzoj 1639: [Usaco2007 Mar]Monthly Expense 月度开支(二分)

    1639: [Usaco2007 Mar]Monthly Expense 月度开支 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 1057  Solve ...

最新文章

  1. 对输入框以及选择框集体的数据检验
  2. shopnc 发票项目
  3. 地市级地铁数据管理信息系统解决方式
  4. Dubbo 3.0 预览版解读,6到飞起~
  5. 项目日报模板_雄东片区A单元安置房项目首栋住宅楼主体结构封顶
  6. ITK:基本区域增长
  7. python正则表达式面试_Python面试 Re-正则表达式
  8. android字符串复制到剪贴板
  9. c语言中extern关键字
  10. java文件中注释出现乱码解决办法
  11. 《机器学习》周志华note2
  12. python 解析 google Chrome 浏览器历史浏览记录以及收藏夹数据
  13. transition 用法
  14. Region Proposal by Guided Anchoring论文翻译和理解
  15. vs code 快速生成html模板插件
  16. screenX clientX pageX的区别
  17. 计算机考试不在学籍库,有消息!中考报名将由学籍库直接导入,取消学校考试排名........
  18. 3.22 42. 接雨水
  19. 使用 ezctl 工具部署和管理 Kubernetes 集群
  20. android 读取手机存储数据恢复,Android手机数据恢复

热门文章

  1. [剑指offer][JAVA]面试题第[12]题[矩阵的路径][DFS][剪枝]
  2. Please remove usages of `jcenter()` Maven repository from your build scripts and migrate your build
  3. ubuntu安装jdk_mysql_Ubuntu server 安装及jdk+mysql安装教程
  4. idea 下划线字段转驼峰_Java如何实现数据库中表字段的下划线和驼峰式命名的Model相互转换,很方便的...-Go语言中文社区...
  5. python3文件的编码类型是什么_python3.x - 怎么查看某个文件的编码方式?python
  6. python webviewer爬虫_爬虫再也不怕检测浏览器环境了
  7. idea将远程代码更新合并到本地_idea 本地调试远程服务器代码
  8. php考勤分析,php考勤系统
  9. windows无法发现任何计算机或设备,Win10系统提示windows无法与设备或资源通信如何解决...
  10. Maven笔记——maven下载与配置