您的位置:首页 > 其它

hdu 2050 折线分割平面

2013-07-26 17:30 162 查看

折线分割平面

Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other)
Total Submission(s) : 42 Accepted Submission(s) : 14

Font: Times New Roman | Verdana | Georgia

Font Size: ← →

Problem Description

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



Input

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

Output

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

Sample Input

2
1
2


Sample Output

2
7


Author

lcy

Source

递推求解专题练习(For Beginner)

直线:
条数
最多交点数
平面数
1
0
2
2
1
f(1)+2
3
2
f(2)+3
4
3
f(3)+4
n
n-1(该条数的直线前面的直线总条数)
f(n-1)+增加的平面数=f(n-1)++(交点数+1)=f(n-1)+((n-1)+1)





平行线:
对数
条数
最多交点数
平面数
1
2
0
3
2
4
4=2*2
f(1)+6=f(1)+3*2
3
6
8=4*2
f(2)+10=f(2)+5*2
4
8
12=6*2
f(3)+14=f(3)+7*2
n
2*n
单条直线交点数*2=该对平行线前的直线总条数*2=(2*(n-1))*2
f(n-1)+单条直线增加的平面数*2=f(n-1)+(交点数+1)*2=f(n-1)+(2*(n-1)+1)*2



折线:
折线数
所含直线数
最多交点数
平面数
1
2
0
2
2
4
4=2*2
f(1)+5=f(1)+(2*3-1)
3
6
8=4*2
f(2)+9=f(2)+(2*5-1)
4
8
12=6*2
f(3)+13=f(3)+(2*7-1)
n
2*n
单条直线交点数*2=该对平行线前的直线总条数*2=(2*(n-1))*2
f(n-1)+(单条直线增加的平面数*2-1)=f(n-1)+((交点数+1)*2-1)=f(n-1)+((2*(n-1)+1)*2-1)
三角形

个数
交点数
增加的平面个数
分割平面总数
1
0
1
2
2
2*3
3*3-3
f(1)+3*3-3
3
4*3
5*3-3
f(2)+5*3-3
4
6*3
7*3-3
f(3)+7*3-3
n
(n*2-2)*3
(2*n-1)*3-3
f(n-1)+(2*n-1)*3-3=f(n-1)+6*(n-1)
#include <stdio.h>
int main()
{
int  N,n,i,j;
__int64  f[10001];
f[1]=2;
for(i=2;i<10001;i++)
{
f[i]=f[i-1]+4*(i-1)+1;
}
while (scanf("%d",&N)!=EOF)
{
for(j=0;j<N;j++)
{
scanf("%d",&n);
printf("%I64d\n",f
);
}

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