您的位置:首页 > 其它

递推 HDU-2050 折线分割平面

2016-02-09 09:52 561 查看
    题目:HDU-2050

    题目链接:http://acm.hdu.edu.cn/search.php?action=listproblem

    题目:


折线分割平面

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)

Total Submission(s): 23413    Accepted Submission(s): 15948


Problem Description

我们看到过很多直线分割平面的题目,今天的这个题目稍微有些变化,我们要求的是n条折线分割平面的最大数目。比如,一条折线可以将平面分成两部分,两条折线最多可以将平面分成7部分,具体如下所示。



 

Input

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

 

Output

对于每个测试实例,请输出平面的最大分割数,每个实例的输出占一行。

 

Sample Input

2
1
2

 

Sample Output

2
7

 

    递推事实上只是一种思想,而且是我们最开始接触的很简单的一种思想,以往的编程中或多或少都有接触过,但是没有统一地去做过,今天就做一下杭电的递推专题吧,虽然说递推的思想很容易理解,但并不代表递推题就很容易做,就像数学题一样,它可以把递推关系藏得很深很深以至于有时甚至无法下手,这就要针对题目具体分析了。

    首先,递推呢,需要求出来至少一个初始值,然后可以通过梳理题意得出一个关系式可以求出来其它值,以此类推下去,思想确实很简单,但是关系式怎么推出来的往往是这类题目的难点,那怎么推呢,子曰,不可云。hhh.

    这道题目的递推关系式是f(n)=f(n-1)+4*i-3,只能说是归纳总结的,硬看,别的好像也没什么办法。

#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<math.h>
using namespace std;
const int maxn=10005;
int ans[maxn];
int main(){
ans[1]=2;
for(int i=2;i<=10000;i++)
ans[i]=ans[i-1]+4*(i-1)+1;
int n,t;
cin>>t;
while(t--){
cin>>n;
cout<<ans
<<endl;
}
return 0;
}


    就是这么简单~~好好学习天天向上~~~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: