递推

Description

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

Input

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

 

Output

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

 

Sample Input

       
2 1 2
 

Sample Output

       
2 7
 

转自:点击打开链接

若是知道了f(i-1)的值,而第i条折线与原来的图案相比多了4*(i-1)个交点,每多一个交点便多出一个区域,而且多出新加入的折线与原来边形成的区域,故+1;

f(i)=f(i-1)+4(i-1)+1;


题目本身并不难,但要从中学到递推,一开始做此题时,把它和直线的切割联系起来了,虽然数字完全匹配,(第i条折线与第2*i-1条直线分出区域的数量一致)

,但实际上并无任意关系,只是碰巧罢了,以后应该从一些顺理成章的思路进行分析(合理性分析及推导)。

#include<cstdio>
#define N 10000
int main()
{
int c,n,i;
__int64 f[N+10];
f[1]=2;
int d=5;
for(i=2;i<=N;i++)
{
f[i]=f[i-1]+d;
d+=4;
}
scanf("%d",&c);
while(c--)
{
scanf("%d",&n);
printf("%I64d\n",f[n]);
}
return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值