Monthly Expense POJ
来源:互联网 发布:国内云计算市场份额 编辑:程序博客网 时间:2024/06/15 15:47
Monthly Expense POJ - 3273 题目地址
题意
Farmer john 知道接下来n天里每天花多少钱, 他想把接下来的n天划分m个fajomonths, 问怎样划分, 使的花费最大的哪一个fajomonths花费最小
分析
1 题目已经说了这么清楚, 肯定是二分搜索啦, 最小化最大值, 二分花费, 只不过本题需要注意的是r = 这n天里花费最大的那一天的花费
参考代码
(好吧,笨笨的我写了好长时间, wrong了好多次)
#include <iostream>#include <cstdio>#define fo0(i,n) for(int i = 0; i < n;+++i)#define fo1(i,n) for(int i = 1; i <= n; ++i)using namespace std;const int LEN = 100000+4;int cost[LEN];int N,M;bool check(int mid)//判断函数{ long long week = 0; long long sum = 0; for(int i = 1;i <= N; ++i) { sum+=cost[i]; if(sum>mid) { sum = cost[i]; week++; } else if(sum == mid) { sum = 0; week++; } if(week>M) return false; } if(sum!=0) ++week; if(week<=M) return true; else return false;}int main(){ cin>>N>>M; int Max = 0; fo1(i,N) { scanf("%d",&cost[i]); if(cost[i]>Max) Max = cost[i]; } int l = Max,r = 0x7fffffff; // cout<<r<<endl; int mid; int ans; while(r-l>1)//二分搜索 { mid = l+(r-l)/2; if(check(mid)) { ans = mid; r = mid-1; } else l = mid+1; } if(check(l)) cout<<l<<endl; else if(check(r)) cout<<r<<endl; else cout<<ans<<endl; return 0;}
阅读全文
0 0
- 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
- POJ 3273 Monthly Expense
- POJ - 3273 Monthly Expense
- POJ-3273-Monthly Expense
- POJ 3273 Monthly Expense
- [Leetcode]Median of Two Sorted Arrays
- 并行编程与计算平台 | NVIDIA CUDA | NVIDIA --- GPU编程
- (十一)外观模式详解(Service第三者插足,让action与dao分手)
- 食物链(poj-1182)(带权并查集)
- python安装
- Monthly Expense POJ
- JVM结构、GC工作机制详解
- mysql联合索引
- OpenGL学习笔记之绘制图元
- 【Gym
- 洛谷 P2184 贪婪大陆( 树状数组的活用 )
- NOIP2014 D2T3 解方程 BZOJ3751 UOJ20 数论 秦九韶算法 玄学
- 溢出覆盖返回地址实现攻击
- 【学生】知识总结