您的位置:首页 > 其它

Problem N

2016-05-11 22:23 169 查看
[align=left]Problem Description[/align]
我们看到过很多直线分割平面的题目,今天的这个题目稍微有些变化,我们要求的是n条折线分割平面的最大数目。比如,一条折线可以将平面分成两部分,两条折线最多可以将平面分成7部分,具体如下所示。<br><img src=../data/images/C40-1008-1.jpg>
 

[align=left]Input[/align]
输入数据的第一行是一个整数C,表示测试实例的个数,然后是C 行数据,每行包含一个整数n(0<n<=10000),表示折线的数量。<br><br>
 

[align=left]Output[/align]
对于每个测试实例,请输出平面的最大分割数,每个实例的输出占一行。<br><br>
 

[align=left]Sample Input[/align]

2
1
2

 

[align=left]Sample Output[/align]

2
7

 
简单题意:

  如上,就是求出n条折线可以分割出多少平面。

解题思路形成过程:

  开始想的特别乱,一直找不到规律。到了最后,我找到一个递归的规律,f(n)=f(n-1)+4*(n-1)+2-1;所以,运用递归,就实现了问题的要求。

感想:

  递归在动态规划中确实有着不可忽视的作用,当然,还需要一定的数学素养才能做出题目。

AC代码:

#include <iostream>

using namespace std;

int f(int n)

{

    int c;

    if(n>1)c=f(n-1)+4*(n-1)+2-1;

    else c=2;

    return c;

}

int main()

{

    int n,c;

    cin>>c;

    for(int i=0;i<c;i++)

    {

        cin>>n;

        cout<<f(n)<<endl;

    }

    return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  acm dp