1 条题解
-
0
#include <iostream> using namespace std; typedef long long ll; // 定义ll为long long的缩写,用于大数(本程序未使用) int a[1010][1010]; // 存储数字塔,如: // a[1][1] // a[2][1] a[2][2] // a[3][1] a[3][2] a[3][3] int dp[1010][1010]; // 存储从塔顶到当前位置的最大路径和 int main(){ int n; // 数字塔的层数 cin >> n; // 输入层数 // 读入数字塔数据 for(int i = 1; i <= n; i++) { // 从第1层到第n层 for(int j = 1; j <= i; j++) { // 每层有i个数字 cin >> a[i][j]; // 输入当前位置的数字 } } // 初始化:塔顶的最大路径和就是它自己的值 dp[1][1] = a[1][1]; // 从第2层开始向下计算 for(int i = 2; i <= n; i++) { // 从第2层到第n层 for(int j = 1; j <= i; j++) { // 计算当前层的每个位置 // 关键:当前位置的最大路径和 = // 上方两个位置中较大的值 + 当前位置的数字 dp[i][j] = max(dp[i-1][j], dp[i-1][j-1]) + a[i][j]; } } // 在最后一层(底层)寻找最大值 int mx = 1; // 假设第一个位置是最大值 for(int i = 2; i <= n; i++) { // 从第二个位置开始比较 if(dp[n][i] > dp[n][mx]) { // 如果找到更大的值 mx = i; // 更新最大值位置 } } // 输出从塔顶到底层的最大路径和 cout << dp[n][mx]; return 0; }
- 1
信息
- ID
- 319
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 2
- 已通过
- 2
- 上传者