数塔问题

来源:互联网 发布:数位板 知乎 编辑:程序博客网 时间:2024/06/07 00:52
/*数塔问题从顶部出发,在每一结点可以选择向正下或者右下走,一直走到底层,要求找出一条路径,使路径上的数值和最大。9121510682189519710416*/#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;}

0 0
原创粉丝点击