递推 HDU-2050 折线分割平面

    题目: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部分,具体如下所示。
递推 HDU-2050 折线分割平面_第1张图片
 

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[n]<<endl;
	}
	return 0;
} 

    就是这么简单~~好好学习天天向上~~~

你可能感兴趣的:(HDU,2050)