/*
數塔問題
從頂部出發,在每一結點可以選擇向正下或者右下走,一直走到底層,要求找出一條路徑,使路徑上的數值和最大。
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;
}
數塔問題
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.