当前位置: 首页 > news >正文

线性DP:数字三角形

 

找路径从上到下找还是从下到上找,分析问题的方法 在于从上往下的话需要考虑从左边下来还是右边下来,那么在左右边界上需要考虑空白边界问题。

从下往上找路径的时候就无需考虑边界判断问题

Dp问题

状态表示

f(i,j)

集合自下而上走到(i,j)位置的路径集合
-
f(i,j)的值存的是什么自下而上走到(i,j)位置的路径长max
-

状态计算

(其实质是集合的划分)

划分左边上来f(i+1,j)+w(i,j)-> f(i,j)
-
右边上来f(i+1,j+1)+w(i,j)-> f(i,j)
-
#include<iostream>
#include<algorithm>
using namespace std;const int N = 510;int n;
int w[N][N], f[N][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];//自底向上初始化Dp数组for (int i = n - 1; i; i--)//从倒数第二行开始,则开始时倒数第一行为i+1行for (int j = 1; j <= i; j++)//从左到右f[i][j] = max(f[i + 1][j], f[i + 1][j + 1]) + w[i][j];//f(i,j)节点左下、右下取max加上f(i,j)点本身权重w(i,j)即可保存路径最大值。//顶点即为最大值cout << f[1][1] << endl;return 0;
}

时间复杂度就是遍历一个二维数组,O(n²),1s内C++完成10^7~10^8次计算,500²远小于该数值,可以完成。

小结:说明遍历的顺序也是动态规划类问题的重点关注环节。

相关文章:

  • 简单使用MCP
  • 体育用品有哪些·棒球1号位
  • 哪个开源协议对用户最友好?开源协议对比
  • 【C++】 —— 笔试刷题day_21
  • 线性回归之归一化(normalization)
  • Linux文件时间戳详解:Access、Modify、Change时间的区别与作用
  • MyBatis-Plus 分页功能详解
  • Jsp技术入门指南【九】详细讲解JSTL
  • 【英语语法】词法---动词
  • 【Linux】进程状态
  • JavaScript 一维数组转不含零的两个数
  • Keil MDK 编译问题:last line of file ends without a newline
  • 理解 React 的 useEffect
  • 线性回归之正则化(regularization)
  • Pandas数据可视化
  • 中科院:LRM在简单问题上缺失快思考能力
  • 抽象工厂模式及其在自动驾驶中的应用举例(c++代码实现)
  • Vivado中Tri_mode_ethernet_mac的时序约束、分析、调整——(五)调试注意的问题
  • Java编程基础(第一篇:变量)
  • prim最小生成树+最大生成树【C++】板子题
  • 金价新高不断,上金所再发风险提示,黄金能否持续闪耀?
  • 第六季了,姐姐们还能掀起怎样的风浪
  • 体坛联播|曼联加时赛神奇逆转,晋粤大战CBA再出重磅罚单
  • 特朗普称美联储主席鲍威尔“应该尽早下台”
  • 这颗“超级地球”真有生命?剑桥团队在系外行星K2-18b发现气体证据
  • 习近平圆满结束对马来西亚的国事访问