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

在一个平面上有一个圆和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


}

 

转载于:https://www.cnblogs.com/zyacmer/p/9907282.html

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值