數字三角形問題

數字三角形問題

   給定一個由n行數字組成的數字三角形,設計一個算法,計算出從三角形的頂至底的一條路徑,使該路徑經過的數字總和最大。

測試用例:

5(行數)

7

3 8

8 1 0

2 7 44

4 5 26 5

輸出:

30

解:

數字三角形問題:
如果得到一條由頂至底的某處的一條最佳路徑,那麼對於該路徑上的每一箇中間點來說,
由頂至該中間點的路徑所經過的數字和也爲最大,但是由頂到底有太多種情況需要考慮, 
  所以採用動態規劃由底到頂的策略,將每條小分支取大值代替a[i][j],最終輸出a[0][0]。
過程如圖(只寫出了處理過程,不變的位置並沒有給出)。 


#include <stdio.h>

int main()
{
	int n;
	int i,j;
	int a[100][100];
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		for(j=0;j<=i;j++)
		{
			scanf("%d",&a[i][j]);
		}
	}
	
	for(i=n-2;i>=0;i--)
	{
		for(j=0;j<=i;j++)
		{
			int temp1=a[i][j]+a[i+1][j];
			int temp2=a[i][j]+a[i+1][j+1];
			a[i][j]=temp1>temp2?temp1:temp2;
		}
	}
	
	printf("%d\n",a[0][0]);
	
 } 




發佈了161 篇原創文章 · 獲贊 70 · 訪問量 19萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章