先看题目:在上面的数字三角形中寻找一条从顶部到底边的路径,使得路径上所经过的数字之和最大。路径上的每一步都只能往左下或 右下走。只需要求出这个最大和即可,不必给出具体路径。 三角形的行数大于1小于等于100,数字为 0 - 99
#include<iostream>
#include<algorithm>
#define NUM 101
using namespace std;
int main(void){
int array[NUM][NUM],n,maxsum[NUM][NUM];
cout<<"请输入三角形数组的行数:"<<endl;
cin >> n;
for(int i = 1; i <= n; i++){
cout<<"请输入该三角形数组的第"<<i<<"行:"<<endl;
for(int j = 1; j <= i; j++){
cin >> array[i][j];
}
}
for(int i = 1;i <= n; i++){
maxsum[n][i] = array[n][i];
}
for(int i = n-1; i > 0 ; i-- ){
for(int j = 1; j <= i; j++){
maxsum[i][j] = max(maxsum[i+1][j],maxsum[i+1][j+1])+array[i][j];
}
}
cout<<maxsum[1][1]<<endl;
return 0;
}
0-1背包问题解法,还可以添加输出路径的功能,欢迎私信我讨论~