二分
Keep_Trying_Go
无
展开
-
poj2446(匈牙利算法)
题意:首先是定两个规则:1.任何正常的网格都应完全用一张卡片覆盖。2.一张卡应正好覆盖两个正常的相邻网格。求解是否可以按照上述规则覆盖棋盘(除了有洞的地方外)。将横坐标,纵坐标的和为奇数的视为A集合;将横坐标,纵坐标的和为偶数的视为B集合;求解两个集合的最大匹配数,如果结果sum=(nm-p)/2(因为给定的就是12大小的卡片,所以是2的偶数才可能),则可以按照上述的规则覆盖棋盘,否则不可以。这道题也是看了大佬的文章之后才想到的!#include<iostream>#inclu原创 2021-09-17 20:48:17 · 168 阅读 · 0 评论 -
poj3061(二分算法)
题意:从给定的序列中找出一个连续的子序列,这个子序列的和大于等于s并且子序列的长度最小。#include<iostream>#include<algorithm>#include<cmath>#include<cstring>using namespace std;typedef long long ll;const double esp=1e-5;const int maxx=100005;int sum[maxx];//记录前缀和 in原创 2021-09-17 17:40:13 · 297 阅读 · 0 评论 -
poj3122(二分算法)
题意:现在有N个圆柱的pie并且高度都为1,分给F个朋友和我自己,即分给F+1个人,每个人可以分到的最大pie。注意题目中的一句话“这应该是一块馅饼,而不是几个小块,因为那看起来很乱。不过,这一块可以是一整块馅饼。”这句话的意思是说每个人分到的pie应该是来自同一个pie.解题思路:二分算法(1)首先找到这些pie中最大的pie_max,pie_max*pie_max*pi作为左区间(right),0作为右区间(left)。(2)通过count+=(int)(pie[i]/mid)求解以mid为当前大原创 2021-09-17 15:39:08 · 369 阅读 · 0 评论 -
poj1003(二分查找算法)
#include<iostream>#include<cmath>#include<algorithm>#include<cstring>using namespace std;const int esp=1e-6;const int inf=0x3f3f3f3f;const int maxx=303;double sum[maxx];int FindMiddle(int left,int right,double v){ while((r原创 2021-09-16 20:37:48 · 186 阅读 · 0 评论 -
HDU2675(二分算法)
题意:根据X^(eY) == (eY)^ 求解X,使得满足该等式:(1)首先等式两边同时取对数:eYln(x)=xln(eY);(2)继续化简:eYln(x)=x(1+ln(Y));根据上面推导的等式利用二分算法进行求解。#include<iostream>#include<algorithm>#include<cmath>#include<iomanip>using namespace std;const double esp=1e-7;原创 2021-09-16 20:09:16 · 155 阅读 · 0 评论 -
HDU2199(二分算法)
题意:求解x在0到100之间是否存在唯一的解,使8x^ 4+7x^ 3+2x^2+3x+6=Y。不存在解的情况是:Y<8f1(0)+7f2(0)+2f3(0)+3f4(0)+6或者Y>8f1(100)+7f2(100)+2f3(100)+3f4(100)+6;思路:采用二分的思想,当出现(right-left)>1e-8,即找到解X。#include<iostream>#include<algorithm>#include<cmath>#原创 2021-09-16 18:29:52 · 189 阅读 · 0 评论 -
poj2728(最优比率生成树)
1.最优比率生成树(最优比例生成树):定义:有向带权图G, 对于图中每条边e[i], 都有cost[i]权值)和dist[i](距离), 要求的是一棵生成树T, 它使得 ∑(cost[i]) / ∑(dist[i]), i∈T 最大(或最小).: 0-1分数规划设x[i]等于1或0, 表示边e[i]是否属于生成树.则我们所求的比率 rate = ∑(cost[i] * x[i]) / ∑(cost[i] * x[i]), 0≤i<m .z( rate ) = ∑(cost[i] * x[i]原创 2021-05-09 20:10:49 · 371 阅读 · 0 评论 -
会场安排算法
#include<iostream>#include<algorithm>#include<cstring>using namespace std;const int maxx=105;int n;struct node{ int stime,etime;}num[maxx];int cmp(node a,node b){ if(a.etime==b.etime){ return a.stime<b.stime; } return a..原创 2021-05-02 21:06:43 · 88 阅读 · 0 评论 -
HDU2037(会场安排)
#include<iostream>#include<algorithm>#include<cstring>using namespace std;const int maxx=105;int n;struct node{ int stime,etime;}num[maxx];int cmp(node a,node b){ if(a.etime==b.etime){ return a.stime<b.stime; } return a.e原创 2021-02-24 00:06:04 · 115 阅读 · 0 评论 -
HDU2032(杨辉三角)
就是打印杨辉三角:#include<iostream>#include<algorithm>#include<cstring>#include<cmath>using namespace std;const int maxx=50;int mat[maxx][maxx];int n;void f(int n){ for(int i=2;i<=n;i++){ for(int j=2;j<=i;j++){ mat[i][j原创 2021-02-24 00:00:16 · 185 阅读 · 0 评论 -
poj1064(二分查找)
采用二分查找,判断取值为mid=(left+right)*0.5时,可以切割的段数,如果小于,则代表mid的取值过大,所以right=mid;否则left=mid.循环一百次之后输出高精度的答案。#include<iostream>#include<algorithm>#include<cstring>#include<cmath>#include<iomanip>using namespace std;const int inf=0原创 2021-02-23 11:14:34 · 306 阅读 · 0 评论 -
poj1905(二分查找)
/*其中高度h不会超过L/2;*/ #include<stdio.h>#include<math.h>#include<stdlib.h>#define esp 1e-8int main(){ double L,n,C; while(scanf("%lf %lf %lf",&L,&n,&C)){ if(L==-1&&n==-1&&C==-1)break; if(n==0){ printf.原创 2021-02-23 11:15:02 · 201 阅读 · 0 评论 -
HDU2141(二分查找)
题意:给出数据x,然后从a,b,c三个数组中找到满足关系a[i]+b[j]+c[k]=x的等式即可输出YES,否则输出NO。首先将a,b数组相加,然后合并的数组和c数组采用二分查找t=x-c[k]的值是存在a,b合并的数组中(要对合并的数组进行排序)。HDU2141#include<iostream>#include<algorithm>#include<cstring>#include<cmath>using namespace std;con原创 2021-02-22 10:02:55 · 223 阅读 · 0 评论 -
HDU2899(二分查找+or+模拟退火算法)
这道题其实是利用函数求导,判断求导后的函数是否大于零或者小于零,等于零情况,从而判断原函数的单调性,代入X求出函数的最小值。#include<stdio.h>#include<math.h>#include<stdlib.h>const double esp=1e-8;double y;double f(double x){ return 6*pow(x,7)+8*pow(x,6)+7*pow(x,3)+5*pow(x,2)-y*x;}double f_原创 2021-02-22 09:58:14 · 294 阅读 · 0 评论