hdu1249 三角形分割平面---递推

题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=1249

题目大意:

用N个三角形最多可以把平面分成几个区域?

思路:

知道了直线和折线分割平面的情况这题就很简单了。我们知道,对于第i个三角形来说,其前面已经有了(i-1)个三角形==>有(3i-3)条边,对于第i个三角形,其每一条边最多能和之前的每个三角形的2条边有交点,即能和前面的(2i-2)条边各有一个交点,而这些交点会把第i个三角形的一条边分割成(2i-1)条线段,每一条线段会增加一个平面,这样3条边就增加了(2i-1)×3个平面,考虑到在三角形的三个顶点,在每一个顶点处相邻的两个线段并不会增加平面的数目,所以在三个顶点处的6个线段实质上只增加了3个平面,所以要减去这3个多算的平面数,这样,第i个三角形就会比i-1个三角形形成的平面数多出(2i-1)×3-3=6×(i-1)个了,即递推关系为:f(n)=f(n-1)+6×(i-1)。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 #include<set>
 6 #include<cmath>
 7 using namespace std;
 8 const int maxn = 1e4 + 10;
 9 typedef long long ll;
10 ll T, n, m;
11 ll a[maxn];
12 int main()
13 {
14     cin >> T;
15     a[1] = 2;
16     for(int i = 2; i <= 10000; i++)a[i] = a[i - 1] + 6 * (i - 1);
17     while(T--)
18     {
19         cin >> n;
20         cout<<a[n]<<endl;
21     }
22     return 0;
23 }

 

posted @ 2018-04-02 10:23  _努力努力再努力x  阅读(305)  评论(0编辑  收藏  举报