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 }
越努力,越幸运