數塔問題

/*
數塔問題
從頂部出發,在每一結點可以選擇向正下或者右下走,一直走到底層,要求找出一條路徑,使路徑上的數值和最大。
9
12	15
10	6	8
2	18	9	5
19	7	10	4	16
*/
#include<iostream>
#include<cstdio>
using namespace std;

int main()
{
 	int a[50][50][3],i,j,n;
 	cout<<"請輸入數塔的高度:";
 	cin>>n;
 	for(i=0;i<n;i++)
 	{
 		for(j=0;j<=i;j++)
 		{
 			cin>>a[i][j][0];
 			a[i][j][1]=a[i][j][0];
 			a[i][j][2]=0;
 		}
 	}
 	
 	for(i=n-2;i>=0;i--)
 	{
 		for(j=0;j<=i;j++)
 		{
 		 	if(a[i+1][j][1]>a[i+1][j+1][1])
			  {
			  	a[i][j][1]=a[i][j][1]+a[i+1][j][1];
			  	a[i][j][2]=0;
			  }	
			  else
			  {
			  	a[i][j][1]=a[i][j][1]+a[i+1][j+1][1];
			  	a[i][j][2]=1;
			  }
 		}
 	}
 	cout<<a[0][0][1]<<endl;
 	j=0;
 	for(i=0;i<n-1;i++)
 	{
 		cout<<a[i][j][0]<<"->";
 		j=j+a[i][j][2];
 	}
 	cout<<a[n-1][j][0];
	return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章