問題 1177 三角形 遞迴 遞推兩種

2021-10-03 07:52:13 字數 1529 閱讀 5923

時間限制: 1sec 記憶體限制: 128mb

7 

3 8

8 1 0

2 7 4 4

4 5 2 6 5

(圖一)

圖一表示乙個5行的數字三角形。假設給定乙個n行數字三角形,計算出從三角形頂至底的一條路徑,使該路徑經過的數字總和最大。

每一步只能由當前位置向左下或右下。

輸入

你的程式要能接受標準輸入。第一行包含乙個整數t,表示總的測試次數。

對於每一種情況:第一行包含乙個整數n,其中1 < n < 100,表示三角形的行數。

接下來的n行輸入表示三角形的每一行的元素ai,j,其中0 < ai,j < 100。

輸出

輸出每次測試的最大值並且佔一行。

樣例輸入15

73 8

8 1 0

2 7 4 4

4 5 2 6 5

樣例輸出

30

方法

1、遞迴,非常直接暴力

缺點:十分浪費時間

自上往下遞迴:時間複雜度o(n)=n2

因為中間存在大量相同的遞迴函式,解決辦法就是記憶化遞迴

即:建立乙個相同大小的陣列(其實可以少一行),賦某乙個關鍵值用來判斷當前位置是否已經得到中間最大值

進行遞迴判斷的時候可以用這個陣列的值作為終止遞迴的判斷條件。

#include

#include

int ta[

100]

[100]=

;int

func

(int i,

int j,

int n)

intmain()

return0;

}

從倒數第二層開始,對左下和右下兩個數進行判斷,將大的數加到其父輩;

依次迴圈直到頂層;

7 												30

3 8 23 19

8 1 0 20 13 10

---->

2 7 4 4 7 12 10 10

4 5 2 6 5 4 5 2 6 5

#include

#include

#define max(a,b) a>b?a:b

int tria[

101]

[101];

intmain()

printf

("%d\n"

, tria[0]

[0])

;}return0;

}

1177 三角形面積

三角形面積 time limit 1000ms memory limit 65536k total submit 179 accepted 105 description 給你三個點,表示乙個三角形的三個頂點,現你的任務是求出該三角形的面積 input 每行是一組測試資料,有6個整數x1,y1,x2...

三角形的兩種畫法

在我的工程裡都嚴格驗證可行的,把關鍵性的演算法摳出來就行.1 利用三角形內部一點到三角形三個頂點的連線組成的三個小三角形面積總和等於此三角形的面積。static float get area point t0,point t1,point t2 bool guiapi polygon ex 2 hd...

遞推 數字三角形

input 57 3 88 1 0 2 7 4 4 4 5 2 6 5 output 30 數字三角形,可以說是一道很經典的題了,這道題應該出現在dp的入門題裡,但是在這裡提前介紹也是有原因的,因為遞推中同樣涉及了這個關係式的推導,好了,來仔細研究下這個三角形吧,總之這個三角形很重要,思想和方法一定...