例题:数字三角形
类似于如图的数字三角形寻找一条从顶部到底部的路径,使得路径所经过的数字和最大。 每一步只能往左下或者右下走。只需求出最大和,不必给出路径。
代码
#include<iostream>
#include<algorithm>
using namespace std;
#define MAX 105
int maxsum[MAX][MAX], d[MAX][MAX]; int n;
int solve(int i, int j){
if(maxsum[i][j] != -1) return maxsum[i][j];
if(i == n) maxsum[i][j] = d[i][j];
else{
int x = solve(i+1, j);
int y = solve(i+1, j+1);
maxsum[i][j] = max(x,y) + d[i][j];
}
return maxsum[i][j];
}
int main(){
int i ,j;
cin >> n;
for(int i = 1; i <= n; i++)
for(int j = 1; j <= i; j++){
cin >> d[i][j];
maxsum[i][j] = -1;
}
cout << solve(1, 1) << endl;
}