数字三角形题解
问 : 求最大的路径数字和
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
假设a[i][j]存上面的数据,b[i][j]存每个数字点的最大路径和,每个数字点的路径和都是正上方或左上方的路径和加上该数字,取其中的最大值,即b[i][j]=max(b[i-1][j],b[i-1][j-1])+a[i][j]。
#include<iostream>
using namespace std;
int main()
{
int n;
cin>>n;
int b[510][510]={0};
for(int i=1;i<=n;i++)
for(int j=1;j<=i;j++)
{
int temp;
cin >> temp;
//前面给数组b初始化为0,当i=1或j=i时,输入值为负,如果没有以下条件制约,b[i][j]=max(b[i-1][j-1],b[i-1][j])中,b[i][j]只会为0。
if(j!=1&&j!=i)b[i][j]=max(b[i-1][j-1],b[i-1][j])+temp;
else if(j==1)b[i][j]=b[i-1][j]+temp;
else if(j==i)b[i][j]=b[i-1][j-1]+temp;
}
for(int i=1;i<=n;i++){
for(int j=1;j<=i;j++){
cout << b[i][j] << ' ';
}
cout << endl;
}
for(int j=1;j<n;j++)
{
if(b[n][j]>b[n][j+1])swap(b[n][j],b[n][j+1]);
}
cout << b[n][n];
return 0;
}