分析:知道了直線和折線分割平面的情況這題就很簡單了。我們知道,對於第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)。
實現**如下:
#include #include using namespace std;
int main()
return 0;
}
本題也可以用尤拉公式來做:
尤拉公式:簡單多面體的頂點數v,稜數e以及面數f之間有:v-e+f=2。
那麼對於本題來說,e[i]=e[i-1]+(4i-3)*3;v[i]=v[i-1]+(2i-1)*3;
實現**如下:
#include #include #include #define max 10001
int v[max],e[max];
void solve()
{ int i;
memset(v,0,sizeof(v));
memset(e,0,sizeof(e));
e[1]=v[1]=3;
for(i=2;i
遞推 數字三角形
input 57 3 88 1 0 2 7 4 4 4 5 2 6 5 output 30 數字三角形,可以說是一道很經典的題了,這道題應該出現在dp的入門題裡,但是在這裡提前介紹也是有原因的,因為遞推中同樣涉及了這個關係式的推導,好了,來仔細研究下這個三角形吧,總之這個三角形很重要,思想和方法一定...
數字三角形 遞推演算法
如下所示為乙個數字三角形。請編乙個程式計算從頂到底的某處的一條路徑,使該路徑所經過的數字總和最大。只要求輸出總和。1 一步可沿左斜線向下或右斜線向下走 2 三角形行數小於等於100 3 三角形中的數字為0,1,99 測試資料通過鍵盤逐行輸入,如上例資料應以如下所示格式輸入 57 3 88 1 0 2...
求大三角形中三角形個數
一道筆試程式設計題要求求乙個大三角形中所有小三角形的個數,大約是下面這種情況 首先想到是的將問題由求邊長為n的三角形個數 求邊長為n 1的三角形個數 求邊長為1的三角形個數 1,回溯求得所有三角形個數。但是再仔細一看因為有重疊三角形和倒置的三角形,所以這個方法不可行。接著找到三角形個數由三部分組成 ...