托兰定理与三分法

先说个简单的 托兰定理 其实就是个公式罢了

https://www.luogu.com.cn/problem/P6269
题意:这道题的描述就是任意三个点不构成环的话这样一个图最多有多少边
图兰定理做法
在这里插入图片描述
在没有(r+1)点团(点团:构成环路的点集)的n个顶点的简单图中,T(n,r)的最多有多少边。

找规律做法
https://oeis.org/
这个网站可以帮助你轻松完成找规律

额外补充:
在这个网站找这个数列的规律时你会发现
请添加图片描述
这样一段话。

https://www.luogu.com.cn/problem/P3382

第一次了解到三分

其实如果就是个板子题我觉得这题难度顶多也就是普及-

关于三分

1.三分是啥

三分是基于二分的拓展,常用于找到极值点之类的题目中

2.三分怎么用

找到两个点 mid1和mid2,然后确定你要找到的那个极值点的精度比如0.001,让mid1分布在mid2的左侧,两个点分布的那一段函数都是单调的,通过不断让mid1和mid2靠近找到极值点。

若f(mid1) < f(mid2),极值点v一定在mid1的右侧。此时,mid1和mid2要么都在v的左侧,要么分别在v的两侧。
在这里插入图片描述
若f(mid1) > f(mid2),极值点v一定在mid2的左侧。

3.怎么找mid1和mid2

只介绍一种没问题的做法
k=(l+r)/3
mid1=l+k
mid2=r-k
这样就确定了mid1和mid2是整个区间的三分点

最后附上三分法的模板

#include <bits/stdc++.h>

using namespace std;
const double eps = 1e-6;
int n;
double a[15];

double f(double x)
{
    double s=0;
    for(int i=n;i>=0;i--)
        s = s*x + a[i];
    return s;
}
int main()
{
    double L,R;
    scanf("%d%lf%lf",&n,&L,&R);
    for(int i=n;i>=0;i--) scanf("%lf",&a[i]);
    while(R-L > eps)
    {
        double k =(R-L)/3.0;
        double mid1 = L+k, mid2 = R-k;
        if(f(mid1) > f(mid2))
               R = mid2;
        else   L = mid1;
    }
    printf("%.5f\n",L);
    return 0;
}

注:三分法的介绍是我学习罗勇军老师的博客做的笔记
原作地址https://www.cnblogs.com/luoyj/p/12408277.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值