dp的简单题,但是我们不能用dfs写,因为100,搜索太慢了,所以我们就从下往上更新每块的值,让它加上正下方或者斜下方的最大值即可。
#include <cstdio>
#include <cstring>
using namespace std;
int dp[105][105];
int max(int a,int b) {
return a > b ? a : b;
}
int main()
{
int n;
scanf("%d", &n);
memset(dp, 0, sizeof(dp));
for (int i = 0; i < n;i++)
for (int j = 0; j <= i;j++)
scanf("%d", &dp[i][j]);
for (int i = n-2; i >= 0;i--) {
for (int j = n-2; j >= 0;j--) {
dp[i][j] += max(dp[i + 1][j], dp[i + 1][j + 1]);
}
}
printf("%d
", dp[0][0]);
return 0;
}