二分&三分
文章平均质量分 64
AC_Gibson
这个作者很懒,什么都没留下…
展开
-
HDU1025 Constructing Roads In JGShining's Kingdom
#include #include #include #define MAX 500005using namespace std;int ans[MAX];int stack[MAX];int LIS(int temp,int len){ int left=1,right=len; int mid; while(left {原创 2014-11-03 13:09:11 · 502 阅读 · 0 评论 -
POJ3122 Pie 二分查找
题目链接:http://poj.org/problem?id=3122题目大意:n个派k+1个人,要使每个人都分得相同大小的一块,问最多可以分得多少。分析:和POJ1064 Cable master一样,只是要注意本题是圆柱。实现代码如下:#include #include using namespace std;#define PI acos(-1.原创 2015-10-14 13:21:18 · 421 阅读 · 0 评论 -
POJ2976 Dropping tests 最大化平均值(二分)
题目链接:http://poj.org/problem?id=2976题目大意:n场测试,每场测试bi道题,答对其中的ai道,最终的得分为∑ai / ∑bi,现在可以从中除去k场测试的成绩,使得最终的得分最大。分析:和POJ3111 K Best一样,只需找出最大值即可,这里就不多说了。实现代码如下:#include #include using nam原创 2015-10-14 12:39:45 · 430 阅读 · 0 评论 -
POJ2456 Aggressive cows 最大值最小化(二分)
题目链接:http://poj.org/problem?id=2456题目大意:FJ有一个有n间牛棚的小屋,牛棚在一条直线上,坐标为分别为x[i],但是他的c头牛对牛棚不满,因此会经常相互攻击,FJ为了防止牛之间相互攻击,因子决定把每头牛都放在离其他牛尽可能远的牛棚,也就是要最大化最近两头牛之间的距离。分析:二分每一个距离d。我们定义C(d)为可以安排牛的位置使得最近两头牛原创 2015-10-14 11:00:01 · 671 阅读 · 0 评论 -
POJ3111 K Best 最大化平均值(二分)
题目链接:http://poj.org/problem?id=3111题目大意:n个珠宝,每个珠宝对应一个重量wi和价值vi,现在要从中找出k个,使的这k个珠宝的单位重量的价值最大,输出这k个珠宝的编号。分析:一般最先想到的方法可能是把物品按照单位价值进行排序,从大到小贪心的进行搜索,但这样做,实际求得的是对于给定的重量,可以得到的最大价值,显然这不是本题所要求的。原创 2015-10-14 12:13:13 · 1062 阅读 · 0 评论 -
POJ1845 Sumdiv A^B的约数和(逆元解法或二分乘法)
题目链接:http://poj.org/problem?id=1845题目大意:计算A^B的所有约数的和对9901取模后的结果。分析:我们知道,对于一个正整数n,我们有n=(p1)^a1*(p2)^a2*...*(pk)^ak,定义约数和函数σ(n)=∏(pi^(ai+1)-1)/(pi-1);那么对于A^B,我们有A^B=(p1)^(B*a1)*(p2)^(B*a2)*.原创 2015-09-19 11:14:46 · 487 阅读 · 0 评论 -
hihoCoder1227 The Cats' Feeding Spots 二分
题目链接:http://hihocoder.com/problemset/problem/1227题目大意:平面上有m个点,要从这m个点当中找出n个点,使得包含这n个点的圆的半径(圆心为n个点当中的某一点且半径为整数)最小,同时保证圆周上没有点。分析:枚举这m个点,以每个点为圆心找出一个符合条件的半径,然后找出这些半径中的最小值即可。至于如何找出半径,我们可以二分[-100原创 2015-09-21 08:54:36 · 471 阅读 · 0 评论 -
最长上升子序列 O(n^2)算法和O(nlogn)算法
最长上升子序列问题(LIS问题) O(n^2)算法(DP)分析:对于一个数列的最长上升子序列,我们用一个数组dp[i]来纪录以a[i]结尾的子序列中的最长上升序列,那么很容易可以想到,对于第一个元素来说,他的dp[1]=1;对于后面的每个元素i,他的dp[i]应该是前面dp[]中最大的一个然后再加上1,即dp[i]=max(dp[j]) (j from 1 to i)原创 2014-10-15 14:12:35 · 834 阅读 · 0 评论 -
HDU5249 KPI 树状数组+二分(或set容器类)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5249分析:树状数组纪录元素排序后的下标,然后二分查找中位数。树状数组+二分实现代码如下:#include #include #include #include #include using namespace std;const int maxn=10005;原创 2015-06-02 12:55:05 · 617 阅读 · 0 评论 -
HDU5248 序列变换 二分
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5248分析:序列中元素的值不大于10^6,可知变换代价最多不会超过10^6,这样我们可以在这个范围内二分查找出最小的变换代价,初始化左右边界left=0,right=10^6+1,对于每一个代价mid=(left+right)/2,我们都遍历a数组(正序倒序遍历都行,区别就在于:正序遍历的话原创 2015-06-01 16:39:40 · 739 阅读 · 4 评论 -
POJ2109 Power of Cryptography 二分
题目大意:给你两个整数n和p(1101 ),让你找出一个整数k,使n^k=p。分析:有两种思路:(1)看一下就可以知道,p的范围是可以用double装下的。然后我们都知道pow函数可以计算一个数的n次方,那么开平方就是计算出一个数的1/n次方了。实现代码:#include #include #include using namespace std;int mai原创 2015-03-19 13:11:39 · 563 阅读 · 0 评论 -
POJ1064 Cable master 二分
题目链接:http://poj.org/problem?id=1064题目大意:有n条绳子,长度分别为L[i]。如果从他们中切割出k条长度相同的绳子的话,这k条绳子每条最长能有多长?(答案保留小数点后两位,规定1单位长度的绳子最多可以切割成100份)。分析:二分搜索最大长度x。我们令C(x)为可以得到K条长度为x的绳子,那么问题就变为了求满足条件C(x)的最大的x。在区间初原创 2015-10-14 10:20:09 · 5289 阅读 · 1 评论