3-3 数字塔问题
一、问题
二、分析
三、代码实现
//3-3数字塔问题
/*
5
30
23 21
20 13 10
7 12 10 22
4 5 2 6 5
*/
#include<iostream>
using namespace std;
int n;
int a[100][100];
int s[100][100];
int t[100][100];
void dp(){
int i,j;
for(i=n-2;i>=0;i--){
for(j=i;j>=0;j--){
s[i][j]= a[i][j]+max(s[i+1][j],s[i+1][j+1]);
}
}
}
void Traceback(int i,int j){
if(i+1==n) return;
if(s[i][j]==a[i][j]+s[i+1][j]){
cout<<" "<<a[i+1][j];
Traceback(i+1,j);
}
else if(s[i][j]==a[i][j]+s[i+1][j+1]){
cout<<" "<<a[i+1][j+1];
Traceback(i+1,j+1);
}
else return;
}
void Print(int a[100][100]){
for(int i=0;i<n;i++){
for(int j=0;j<=i;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
}
int main(){
cin>>n;
for(int i=0;i<n;i++){
for(int j=0;j<=i;j++){
cin>>a[i][j];
s[i][j]=a[i][j];
}
}
dp();
cout<<"输出s[i][j]\n";
Print(s);
cout<<"输出traceback\n"<<a[0][0];
Traceback(0,0);
return 0;
}