zoukankan      html  css  js  c++  java
  • 6.数字三角形

    先来解释一下什么是线性dp

    在求状态转移方程时,有明显的线性求取顺序

    比如背包问题

     这道题目我们先给数字编号

     分析

     dp问题的时间复杂度如何分析

    一般是状态数量乘以转移的计算量(就是算每个状态需要的计算量)

    本题大致就是500 * 500

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 const int N = 510, INF = 1e9;
     4 int a[N][N]; //存储三角形中的每一个点 
     5 int dp[N][N];
     6 int main() {
     7     int n;
     8     cin >> n;
     9     for (int i = 1; i <= n; i++) {
    10         for (int j = 1; j <= i; j++) {
    11             cin >> a[i][j];
    12         }
    13     }
    14     for (int i = 1; i <= n; i++) { //全部初始化为-INF 
    15         for (int j = 0; j <= i + 1; j++) { //注意每行多初始化一个 
    16             dp[i][j] = - INF;
    17         }
    18     }
    19     dp[1][1] = a[1][1]; //边界 
    20     for (int i = 2; i <= n; i++) { //从第2行开始做 
    21         for (int j = 1; j <= i; j++) {
    22             dp[i][j] = max(dp[i - 1][j - 1] + a[i][j], dp[i - 1][j] + a[i][j]);
    23         }
    24     }
    25     int res = -INF;
    26     for (int i = 1; i <= n; i++) { //遍历最后一行找最大值 
    27         res = max(res, dp[n][i]);
    28     }
    29     cout << res << endl;
    30     return 0;
    31 }
  • 相关阅读:
    Meta http-equiv属性详解(转)
    meta
    meta viewport 详解
    jquery 常用函数
    jquery 设置css样式
    jquery 常用函数集锦
    DATEDIFF 和 DATEADD
    C# 二进制图片串互转
    C# 二进制字符串互转
    重集合中找出最相近的一个数字
  • 原文地址:https://www.cnblogs.com/fx1998/p/12833786.html
Copyright © 2011-2022 走看看