算法基础之数字三角形
2023-12-25 05:53:02
数字三角形
-
核心思想:线性dp
-
集合的定义为 f[i][j] –> 到i j点的最大距离
-
从下往上传值 父节点f[i][j] = max(f[i+1][j] , f[i+1][j+1]) + w[i][j]
-
初始化最后一层 f = w
-
#include <bits/stdc++.h> using namespace std; const int N = 510; int w[N][N],f[N][N]; int n; int main() { cin >> n; for (int i = 1; i <= n; i++) for (int j = 1; j <= i; j++) cin >> w[i][j]; for(int i=1;i<=n;i++) f[n][i] = w[n][i]; for (int i = n - 1; i >= 1; i--) for (int j = 1; j <= i; j++) f[i][j] = max(f[i + 1][j + 1], f[i + 1][j]) + w[i][j]; //左孩子和右孩子取最大 + 距离 cout << f[1][1] << endl; }
-
优化版:
-
#include <bits/stdc++.h> using namespace std; const int N = 510; int f[N][N]; int n; int main() { cin >> n; for (int i = 1; i <= n; i++) for (int j = 1; j <= i; j++) cin >> f[i][j]; for (int i = n - 1; i >= 1; i--) for (int j = 1; j <= i; j++) f[i][j] = max(f[i + 1][j + 1], f[i + 1][j]) + f[i][j]; //用完f[i][j]距上一层距离 就将其更新成距底部距离 cout << f[1][1] << endl; }
-
-
文章来源:https://blog.csdn.net/Pisasama/article/details/135188801
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!