- 浏览: 202443 次
- 性别:
- 来自: 武汉
文章分类
- 全部博客 (137)
- c++ (74)
- c++,算法,回溯 (2)
- DP问题。 (9)
- DP问题,0/1背包问题 (3)
- 数学问题 (6)
- 贪心算法 (10)
- 排序 (16)
- 数据结构 (7)
- 容器 (2)
- 模拟问题 (2)
- 水题 (8)
- 并查集 (3)
- 非技术 (2)
- 素数问题 (1)
- DFS (3)
- 二叉树 (1)
- 递归 (1)
- 图论 (5)
- 最小生成树 (5)
- 最短路径 (6)
- bell_flaod算法 (2)
- hash (3)
- 二分查找 (1)
- 搜索 (5)
- BFS (5)
- STL (3)
- 字符串hash (1)
- 拓扑排序 (1)
- 字典树 (4)
- 哈弗曼树 (1)
- KMP (7)
- 线段树 (9)
- 树状数组 (6)
- 全排列 (2)
- DP问题 (2)
- LCS (1)
- 最长不下降子序列 (2)
- 面试经验 (3)
题意:给你天数n,和每天需要花的钱,让你把这些天分成m份(每份都是连续的天),要求每份的和尽量少,输出这个和。
一开始二分的上界为n天花费的总和(相当于分成1份),下界为每天花费的最大值(相当于分成n份),然后二分,每次的mid值为(上界 + 下界)/ 2,然后根据mid值遍历n天花费,对n天的花费进行累加,每当超过mid值 份数++,看看这个mid值能把n天分成几份,如果份数大于m,表示mid偏小,下界 = mid + 1,反之小于等于mid,上界 = mid - 1,然后输出最后的mid值即可,复杂度为 O(nlogM),M约为第一次的上界。
代码如下:
#include<iostream> using namespace std; const int Max = 100050; int main() { int n, m, money[Max]; scanf("%d%d", &n, &m); int i, max = 0, sum = 0; for(i = 1; i <= n; i ++) { scanf("%d", &money[i]); if(money[i] > max) max = money[i]; sum += money[i]; } int mid, low = max, high = sum; while(high > low) { // 二分。 mid = (high + low) / 2; int count = 1, w = 0; for(i = 1; i <= n; i++) { // count为当前mid值对应的把天分成的份数。 w += money[i]; if(w > mid) { count ++; w = money[i]; } } if(count > m) low = mid + 1; // 整数在/2的时候可能造成精度不够,故可+1。 else high = mid - 1; } printf("%d\n", high); return 0; }
通过这道题目,复习了二分查找,又进一步学习了贪心算法。
发表评论
-
虚函数、纯虚函数、虚基类、抽象类、虚函数继承、虚继承
2013-08-29 14:34 841虚函数:虚函数是C++中用于实现多态(polymorphis ... -
排序算法总结
2013-05-17 11:00 842选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法, ... -
poj 3122
2012-12-11 19:51 870题意:作者要开一个生日party,他现在拥有n块高度都为1 ... -
算法复习贪心算法poj2393
2012-08-09 16:52 1053题意:一个工厂每周要提供不同数量单位的酸奶酪,每周生产单位酸奶 ... -
算法复习之贪心算法poj2709
2012-08-09 16:14 1062题意:一套涂料有3~12种颜色,每种颜色50ml。Emily上 ... -
算法复习之贪心算法poj 065
2012-08-09 15:07 893题意:有n条木棒,给出它们每条的l和w,用一台机器对它们进行加 ... -
算法复习之贪心算法之poj 1323
2012-08-07 16:27 1250题意:一次card比赛,有m个参赛者(包括你),每个参赛者有n ... -
算法复习之贪心算法poj2586
2012-08-07 15:40 1228题意:对于MS Inc来说,每个月如果盈利则必盈利sur,如果 ... -
算法复习之贪心算法 poj 1328
2012-08-07 15:14 10187题意:地图的x轴的上方为海,下方为陆地,海中有n个小岛,坐标为 ... -
字典树学习材料
2012-05-30 14:29 970字典树,又称单词查找树,Trie树,是一种树形结构,典型应 ... -
poj 1159
2012-05-28 19:08 1446题目大意:给你一段字符串,让你求出在中间最少加入几个字符 ... -
poj 3176
2012-05-28 14:47 1019大致题意: 输入一个n层的三角形,第i层有i个数,求从第 ... -
poj 1260
2012-05-28 09:54 1614题意解释: 有n个等级的珠宝,等级依次升高,等级越高价钱越高 ... -
poj 1836
2012-05-28 09:22 2714是POJ2533的扩展题。题意不难,令到原队列 ... -
poj 2533
2012-05-26 15:36 1274在做这道题目之前,首先让我们了解一下什么是LIS算法,LIS俗 ... -
poj 3267
2012-05-26 09:43 804从程序可以看出,第i个位置到L所删除的字符数,总是先取最坏情况 ... -
poj 1276
2012-05-25 16:20 2397题意: 这道题的意思是给你一堆钱,各种面值的都有,比 ... -
poj 1094
2012-05-25 13:54 1108题意:给出字母个数,和有限个有序对(a<b)求出能确定字 ... -
poj 3393
2012-05-23 17:00 1259大致题意: 科普文一篇,文章80%都是无用信息,因为 ... -
poj 3007
2012-05-14 10:21 994大致题意: 给定一个字符串,从任意位置把它切为两半, ...
相关推荐
【标题】"POJ3273-Monthly Expense"是一个编程题目,源自北京大学的在线判题系统POJ(Problem Set of Peking University)。这个题目主要考察的是算法设计和问题解决能力,通常在ACM/ICPC(国际大学生程序设计竞赛)...
《POJ3273 Monthly Expense 题解——数据结构与动态规划的应用》 POJ3273,这是一道经典的算法竞赛题目,它涉及到的问题是:如何有效地合并连续的数,使得合并后的集合数量不超过M个,并且这些集合的和尽可能小。这...
* 计算方法:计算方法是指解决问题的计算方法算法,如 poj3273、poj3258、poj1905、poj3122。 七、计算几何学 计算几何学是指解决问题的计算几何学算法,包括几何公式、叉积和点积的运用、多边型的简单算法和...
* 二分法求解单调函数相关知识:例如 poj3273、poj3258、poj1905、poj3122。 计算几何学 1. 几何公式。 2. 叉积和点积的运用:例如 poj2031、poj1039。 3. 多边型的简单算法(求面积)和相关判定(点在多边型内,...
- **例题**:poj3273, poj3258, poj1905, poj3122 - **解释**:概率统计问题通常涉及计算某个事件发生的概率。 ### 五、数值计算 #### 1. 数值分析 - **例题**:未列出具体题目 - **解释**:数值分析涉及数值计算...
如二分法用于逼近单调函数的根,提高算法效率,见poj3273和poj3258。 ### 七、计算几何学 #### 几何公式与运算 叉积和点积用于判断线段交叉、计算点到线段距离等,如poj2031。 #### 多边形算法 包括求多边形面积...
- **计算方法**:如二分法求解单调函数,如poj3273。 7. **计算几何**: - **几何公式**:用于解决几何问题。 - **叉积与点积**:辅助判断线段相交、点到线段距离等,如poj2031。 - **多边形算法**:如求面积、...
例如,题目poj3273和poj3258就涉及到几何知识。 ### 8. 编程技巧 编程技巧部分强调代码的编写规范、效率优化和调试技巧。例如,C++标准模板库(STL)的使用、自定义数据结构的设计等。掌握这些技巧有助于提高代码...
- (poj3273, poj3258, poj1905, poj3122):研究两个或多个参与者之间的决策过程。 ### 六、数值计算 1. **精度控制**: - 如何处理浮点数的精度问题。 2. **高精度运算**: - 处理大数的加减乘除等操作。 3. ...
- POJ 3273、POJ 3258:几何对象之间的关系。 - POJ 1905、POJ 3122:复杂的几何计算问题。 ### 字符串处理 #### 后缀数组 - **题目示例**: - POJ 2031、POJ 1039:后缀数组的构建与应用。 #### 字典树 ...
1. **博弈论基础**:如Nim游戏策略(poj3273, poj3258, poj1905, poj3122)。 ### 九、数值分析 1. **数值方法**:包括数值积分、数值微分等(poj2031, poj1039)。 2. **数值稳定性**:关注算法的精度和稳定性...
- poj3273 - poj3258 - poj1905 - poj3122 - **应用场景**:适用于数值分析、方程求解等问题。 #### 七、计算几何学 **1. 几何公式** - **定义**:包括计算面积、周长等。 - **示例题目**: - poj1265 - poj...
3. **计算方法**:掌握二分法求解单调函数问题,如POJ3273、3258、1905和3122。 ### 计算几何学 1. **几何公式**:理解和应用几何原理。 2. **叉积和点积**:用于判断线段相交、计算距离等,如POJ2031和1039。 3. *...
- **示例题目**: poj3273, poj3258, poj1905, poj3122 ### 六、组合数学 #### 1. 组合数学 - **内容**: 包括排列组合、容斥原理等问题。 - **示例题目**: 未给出具体题目 - **知识点**: - **排列组合**:从n个...
- poj3273, poj3258, poj1905, poj3122 七、计算几何学 * 几何公式 * 叉积和点积的运用:poj2031, poj1039 * 多边型的简单算法:poj1408, poj1584 * 凸包:poj2187, poj1113 中级部分: 一、基本算法 * C++的...
(3) 计算方法:poj3273, poj3258, poj1905, poj3122 八、计算几何学 本部分涵盖了计算几何学,包括几何公式、叉积和点积的运用、多边型的简单算法和相关判定、凸包等。 (1) 几何公式: (2) 叉积和点积的运用:poj...
3. 计算方法:二分法解决单调函数问题,如poj3273、poj3258等。 七、计算几何学 1. 几何公式:如点、线、面的关系。 2. 叉积和点积:用于判断线段相交和距离计算,如poj2031、poj1039。 3. 多边形:求面积和相关...
数学知识是算法中的另一个重要组成部分,包括组合数学(如 poj3252)、数论(如 poj2635)和计算方法(如 poj3273)。 计算几何学则涉及到几何公式、点积和叉积的运用,以及多边形的处理,例如 poj2031 和 poj1039...
- 计算方法:如二分法,如POJ3273。 7. **计算几何学** - 几何公式:应用几何原理解决问题,如点到线段距离。 - 叉积和点积:用于判断线段相交和距离,如POJ1039。 - 多边形算法:计算面积和相关判定,如POJ...
poj3252、poj1850、poj1019和poj1942等题目涉及组合数学,poj2635、poj3292、poj1845和poj2115则与数论相关,而poj3273、poj3258、poj1905和poj3122则需要使用到计算方法。 七、计算几何学 计算几何学是处理几何...