• 直线分割平面(动态规划递推)


    在一个平面上有一个圆和n条直线,这些直线中每一条在圆内同其他直线相交,假设没有3条直线相交于一点,试问这些直线将圆分成多少区域。

    /*
    思路:
    n=1时有两个平面
    这时让n=2,多一条直线,这条直线最多与n-1条直线也就是1个直线相交
    相交后有n-1个交点,那么这条新直线最多接触到n个平面
    这n个平面都被一分为二,产生了n个新平面,所以f[i]=f[i-1]+i
    
    举例:
    当n=2时有2条直线4个平面
    这时加入第三条,他最多与n=2每个直线相交一次
    然后最多接触到3个平面
    接触到的平面都被一分为二
    所以f[3]=f[2]+2
    */
    //本题代码只考虑一组数据
    #include<bits/stdc++.h>
    #define ll long long
    const ll maxn=100;
    using namespace std;
    ll f[maxn]={0};
    int main()
    {
        ll n;
        cin>>n;
    
        f[1]=2;
        for(ll i=2;i<=n;i++)
            f[i]=f[i-1]+i;
        cout<<f[n]<<endl;
        //可以把for循环改成等差数列前n项和求和,
        //f[1]=2
        //f[2]=2+2
        //f[3]=2+2+3
        //f[4]=2+2+3+4
        //那么f[n]=2+(2+3+4+5+....+n)
    //                  =2+(-1)+(n*(n+1))/2
    
    
    }
  • 相关阅读:
    语文成语的积累
    关于翻译
    关于文常
    语文小说
    语文 散文阅读
    矩佬的博客
    字词
    语文病句
    地理
    寒假某cg的数学卷子....
  • 原文地址:https://www.cnblogs.com/zyacmer/p/9907282.html
Copyright © 2020-2023  润新知