广度优先,动态规划,题目中已有分析,根据分析贴上自己的代码
#include "iostream"
#include "algorithm"
#include "cstdio"
using namespace std;
int main(){
int reward[105][105],dp[105][105];
int n;
while(cin >> n) {
for(int i = 0; i < n; i++)
for(int j = 0; j <= i; j++) cin >> reward[i][j];
dp[0][0] = reward[0][0];
for(int i = 1; i < n; i++)
for(int j = 0; j <= i; j++) {
if(j == 0) dp[i][j] = dp[i-1][j] + reward[i][j];
else if(i == j) dp[i][j] = dp[i-1][j-1] + reward[i][j];
else dp[i][j] = max(dp[i-1][j-1],dp[i-1][j]) + reward[i][j];
}
int ans = dp[n-1][0];
for(int i = 1; i < n; i++){
if(ans < dp[n-1][i]) ans = dp[n-1][i];
}
cout << ans << endl;
}
return 0;
}