POJ-3273(二分)】的更多相关文章

思路:二分答案经典题吧....注意边界就OK了 //By SiriusRen #include <cstdio> #include <algorithm> using namespace std; int n,m,a[100050],ans; bool check(int x){ int jy=0,temp=0; for(int i=1;i<=n;i++){ if(a[i]+jy>x){ jy=0; temp++; if(temp>m)return 0; } jy…
题目:http://poj.org/problem?id=3273 二分枚举,据说是经典题,看了题解才做的,暂时还没有完全理解.. #include <stdio.h> #include <string.h> int n, m; ]; bool judge(int x) { , cnt = ; ; i < n; i++) { if(money + a[i] <= x) money += a[i]; else { money = a[i]; cnt++; } } if(c…
POJ 3273 Monthly Expense 此题与POJ3258有点类似,一开始把判断条件写错了,wa了两次,二分查找可以有以下两种: ){ mid=(lb+ub)/; if(C(mid)<=m) ub=mid; ; //此时下限过小 } out(ub);//out(lb) 我一开始是写的下面这种,下面这种要单独判断lb和ub的值,因为用下面这种判断lb,ub都可能成立 ){ mid=(lb+ub)/; if(C(mid)<=m) ub=mid; else lb=mid; } if(C(…
以下三道都是经典二分,道理都差不多,代码就贴在一起了. POJ 3122    POJ 3258    POJ 3273 POJ 3122: #include<iostream> #include<cstdio> #include<cmath> #include<algorithm> using namespace std; #define PI 3.14159265359 //ÓÃ3.1415926»áWA¡£¡£¡£ ]; int main() { in…
[POJ 3273] Monthly Expense (二分) 一个农民有块地 他列了个计划表 每天要花多少钱管理 但他想用m个月来管理 就想把这个计划表切割成m个月来完毕 想知道每一个月最少花费多少 每一个月的花费是这个月的花费加和 必须按计划表的顺序来 全部天中花费中最大花费作为下界 全部花费加和作为上界 二分上下界间的花费可能 找出最少每月花费就可以 代码例如以下: #include <iostream> #include <cstdio> using namespace s…
POJ 3273 Monthly Expense二分查找(最大值最小化问题) 题目:Monthly Expense 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 ≤ mon…
题目传送门 /* 题意:分成m个集合,使最大的集合值(求和)最小 二分搜索:二分集合大小,判断能否有m个集合. */ #include <cstdio> #include <algorithm> #include <cstring> #include <cmath> using namespace std; ; const int INF = 0x3f3f3f3f; int a[MAXN]; int n, m; bool check(int tot) { ,…
依然是学习分析方法的一道题 求一个长度为n的序列中的一个平均值最大且长度不小于L的子段,输出最大平均值 最值问题可二分,从而转变为判定性问题:是否存在长度大于等于L且平均值大于等于mid的字段和 每个数与mid作差再转变为求非负子段 子段和问题应该利用前缀和C,长度大于等于L的字段和最大值可表示为 max{Aj+1 + Aj+2 ... + Ai},i-j+1-1>=L,j+1>=1 等价于 max{Ci-min{Cj}},L<=i<=n,0<=j<=i-L 注意是i=…
题目:http://poj.org/problem?id=3273 题意:把n个数分成m份,使每份的和尽量小,输出最大的那一个的和. 思路:二分枚举最大的和,时间复杂度为O(nlog(sum-max)); 一道很好的题. #include <iostream> #include <cstdio> #include <cstring> #include <cstdlib> #include <algorithm> using namespace s…
/** 大意: 有连续的n天,每一天有一定的花费,将其分成m份,每一份占一天或者连续的几天,求这m份中的最大值 思路: 二分其最大上限,看在此最大上线,能分成多少份,若大于m份,说明上限过小,需要扩大上限 若小于m份,则说明,下限过大,需要缩小上限. **/ #include <iostream> using namespace std; ]; // 记录,每天的花费 int main() { int n,m; cin>>n>>m; ,sum =; ;i<=n;i…
Monthly Expense Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 14158   Accepted: 5697 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 r…
题目链接:https://vjudge.net/problem/POJ-3273 把n个连续的数字划分成m个连续的部分,每个部分都有一个部分和(这个部分所有值加起来),现在要使划分里最大的那个部分和最小. 我用的也是二分,用二分枚举最大的部分和. 代码: #include<iostream> #include<cstring> #include<algorithm> #include<queue> #include<map> #include&l…
Monthly Expense Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 36628 Accepted: 13620 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 reco…
题意:给出n天的花费,需要将这n天的花费分成m组,使得每份的和尽量小,求出这个最小的和 看题目看了好久不懂题意,最后还是看了题解 二分答案,上界为这n天花费的总和,下界为这n天里面花费最多的那一天 如果mid>=m,说明mid偏小,l=mid+1, 如果mid<m,说明mid偏大,r=mid, #include<iostream> #include<cstdio> #include<cstring> #include <cmath> #inclu…
//最大值最小 //天数的a[i]值是固定的 不能改变顺序 # include <algorithm> # include <string.h> # include <stdio.h> using namespace std; int n,m; int a[100010]; int judge(int x) { int ans=1;//分成了几组 int tmp=0; for(int i=0;i<n;i++) { tmp+=a[i]; if(tmp>x) {…
Monthly Expense 直接上中文 Descriptions 给你一个长度为N的序列,现在要让你把他们切割成M份(所以每一份都是连续的),然后每一份都有一个和sum[i],其中最大的一个是maxSum = max(sum[i]),问这个最大值最小是多少? 输入 多组输入输出每组数据第一行是2个整数N,M(1<=M<=N<=100000),接着是N行,每行一个整数vi,表示这个序列. 输出 每组数据输出一行一个数,为这个最大值最小是多少 输入样例 7 510040030010050…
Monthly Expense Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 19207   Accepted: 7630 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 r…
题目:http://poj.org/problem?id=3273 当分成的组数越多,所有组的最大值就会越小或不变,这一点不难证明:    如果当前分成了group组,最大值是max,那么max的这一组天数>=1,这时把max的这一组再分成2组,总的组数变成了group+1,最大值显然会减小或不变(当还有另一组是max或者max组只包含一天时不变).    所以组数和本题的答案是单调的关系.    设答案在区间[low, high],不难看出low是花费最多的一天的值,high是每天花费的总和.…
题目:http://poj.org/problem?id=3273 思路:通过定义一个函数bool can(int mid):=划分后最大段和小于等于mid(即划分后所有段和都小于等于mid) 这样我们转化为求 满足该函数的 最小mid.即最小化最大值,可以通过二分搜索来做,要注意二分的边界.WR了好几次. 代码: #include<iostream> #include<string> #include<cstdlib> #include<cstdio> u…
http://poj.org/problem?id=3621 求一个环的{点权和}除以{边权和},使得那个环在所有环中{点权和}除以{边权和}最大. 0/1整数划分问题 令在一个环里,点权为v[i],对应的边权为e[i],  即要求:∑(i=1,n)v[i]/∑(i=1,n)e[i]最大的环(n为环的点数),  设题目答案为ans,  即对于所有的环都有 ∑(i=1,n)(v[i])/∑(i=1,n)(e[i])<=ans  变形得ans* ∑(i=1,n)(e[i])>=∑(i=1,n)(v…
题目链接: http://poj.org/problem?id=3061 题目大意:找到最短的序列长度,使得序列元素和大于S. 解题思路: 两种思路. 一种是二分+前缀和.复杂度O(nlogn).有点慢. 二分枚举序列长度,如果可行,向左找小的,否则向右找大的. 前缀和预处理之后,可以O(1)内求和. #include "cstdio" #include "cstring" ],n,s,a,T; bool check(int x) { int l,r; ;i+x-&…
题目链接: http://poj.org/problem?id=2456 题目大意:n个房子,m头牛,房子有一个横坐标,问将m头牛塞进房子,每两头牛之间的最大间隔是多少. 解题思路: 不难看出应该二分房子间隔,找一个最大的可行间隔. 首先将房子坐标排序,这样只需从第1个房子开始塞牛就行了,且第一个房子肯定得塞一只牛,才能保证空间的有效利用. 这样,每次对于一个间隔,从第一个房子开始塞牛: ①如果上一个房子坐标last+间隔<=h[i],那么这个房子肯定得塞牛,才能有效利用空间,更新last,cn…
题目链接: http://poj.org/problem?id=1064 题目大意:一堆棍子可以截取,问要求最后给出K根等长棍子,求每根棍子的最大长度.保留2位小数.如果小于0.01,则输出0.00 解题思路: 根据最长的棍子二分枚举切割长度. 这点很容易想到. 本题麻烦的地方在于小数的二分. 由于精度丢失问题,如果直接使用double进行二分,那么二分确定的最大长度必然是不精确的. 如:只有1根100.0的棍子,分成10段.如果使用double二分,那么就算把精度控制到0.0000001, 最…
题目链接:http://poj.org/problem?id=3228 思路:增设一个超级源点和一个超级汇点,源点与每一个gold相连,容量为gold数量,汇点与仓库相连,容量为仓库的容量,然后就是二分最小的最大相邻距离,跑最大流验证即可.最大流用的是别人的Dinic模版. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<queue&g…
Matrix Time Limit: 6000MS   Memory Limit: 65536K Total Submissions: 7415   Accepted: 2197 Description Given a N × N matrix A, whose element in the i-th row and j-th column Aij is an number that equals i2 + 100000 × i + j2 - 100000 × j + i × j, you ar…
Median Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7687   Accepted: 2637 Description Given N numbers, X1, X2, ... , XN, let us calculate the difference of every pair of numbers: ∣Xi - Xj∣ (1 ≤ i < j ≤ N). We can get C(N,2) difference…
题目地址:id=3122">POJ 3122 题意:给出n个pie的直径.有F+1个人,假设给每人分的大小同样(形状能够不同),每一个人能够分多少.要求是分出来的每一份必须出自同一个pi(既当pie大小为3.2,1,仅仅能分出两个大小为2的份,剩下两个要扔掉.) 思路:对每个人分的大小进行二分. 注意讲pi放在最后成.能够提高精度. Ps:wa了5发.不知道错在哪,然后把输出的%lf改成%f就A了,并不知道为什么...sad #include <stdio.h> #includ…
题目链接:http://poj.org/problem?id=2112 思路:由于要求奶牛走的最远距离的最短路程,显然我们可以二分距离,如果奶牛与挤奶器的距离小于等于limit的情况下,能够满足,则在(low,limit-1)中继续二分,否则在(limit+1,high)中寻找,那满足的条件就是根据题目的条件每头奶牛都能找到挤奶器,由于每个挤奶器可以最多挤M头奶牛,因此要求多重匹配. 注意点:一开始要Floyd预处理出每头奶牛到挤奶器的最短距离. http://paste.ubuntu.com/…
题意: 思路: 二分跨度 枚举最低座次 建图:源点向每头牛连边权为1的边 每头牛向当前枚举的B的区间这段连上边权为1的边 所有座次向汇点连边权为牛棚容量的边 判判流量是不是等于n 一开始写得是直接枚举答案,在这个答案下枚举座次最低的值 T了.. (然后我看了一发数据 ) 数据中有这样一个点:1000 20 balabala 答案是20 这就很蛋疼了 我枚举了200次 略多 (虽然在我电脑上还是能1s之内跑出来 但是POJ评测机并不快啊) 我就把答案的那个20二分了一下 变成了6 枚举大概几十次…
D - Expanding Rods POJ - 1905 When a thin rod of length L is heated n degrees, it expands to a new length L'=(1+n*C)*L, where C is the coefficient of heat expansion. When a thin rod is mounted on two solid walls and then heated, it expands and takes…