思路:
简单DP。
#include <iostream>
#include <string>
#include <vector>
#include <set>
#include <map>
#include <queue>
#include <algorithm>
#include <fstream>
#include <cmath>
#include <cstring>
#include <limits.h>
#define Long long long
#define uint unsigned int
#define N
#define mod 1000000007
#define inf 100000000
#define eps 1e-10
#define For(i,l,r) for(int i=l;i<=r;i++)
#define Dor(i,r,l) for(int i=r;i>=l;i--)
using namespace std;
ifstream in("/Users/urey/data/input.txt");
//_________________________________________________________________________________
int n;
int data[101][101], record[101][101];
int dfs(int layer, int i) {
if(layer == n) {
return data[layer][i];
}
int left = 0, right = 0;
if(record[layer][i] == 0) {
left = data[layer][i] + dfs(layer + 1, i);
right = data[layer][i] + dfs(layer + 1, i + 1);
record[layer][i] = max(left, right);
}
return record[layer][i];
}
int main(int argc, const char * argv[]) {
in>>n;
for(int i = 1; i <= n; ++i) {
for(int j = 1; j <= i; ++j) {
in>>data[i][j];
}
}
memset(record, 0, sizeof(record));
int sum = dfs(1, 1);
cout<<sum<<endl;
return 0;
}