首页 > 其他分享 >洛谷 P1216 数字三角形

洛谷 P1216 数字三角形

时间:2024-06-16 13:32:01浏览次数:17  
标签:洛谷 数字 int num P1216 数组 三角形 递推 dp

题目链接:数字三角形



思路

       dp:金字塔顶的元素为起点,金字塔每行的最左侧数字只能从上一层的最左侧数字到达,如7 -> 3 -> 8 -> 2 -> 4,这些数字中的每一个(除起点7外)都只能从上一层的最左侧数字到达,递推公式为dp[i][1] = max(dp[i][1], num[i][1] + dp[i - 1][1],最右侧数字同理,递推公式为dp[i][i] = max(dp[i][i], num[i][i] + dp[i - 1][i - 1],而中间的数字可以由上层相邻的两个数字到达,递推公式为dp[i][j] = max(dp[i][i], num[i][j] + dp[i - 1][j - 1], num[i][j] + dp[i - 1][j]
       优化:由于存储时使用的边界值为1,所以金字塔的最左侧和最右侧的数字的递推公式可以统一为dp[i][j] = max(dp[i][i], num[i][j] + dp[i - 1][j - 1], num[i][j] + dp[i - 1][j],然后发现每次递推时只需要使用两层的数据,所以将空间复杂度优化为O(2 * n),然后每次使用第一层计算出第二层之后,第一层的dp数组就不会再被使用,此时将第二层的dp数组赋值给第一层的dp数组,再用此时的第一层的dp数组计算出第二层的dp数组,一直递推即可得到第r层的dp数组,然后再对第r层的dp数组取最大值即可得到结果。
image

代码

#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int N = 1e5 + 10;
int dp[2][N], num[N];
int main() {
  int r;
  cin >> r;
  for (int i = 1; i <= r; i++) {
    for (int j = 1; j <= i; j++) {
        cin >> num[j];
    }
    for (int j = 1; j <= i; j++) {
      dp[1][j] = num[j] + max(dp[0][j], dp[0][j - 1]);
    }
    swap(dp[0], dp[1]);
  }

  int res = 0;
  for (int i = 1; i <= r; i++) {
    res = max(res, dp[0][i]);
  }

  cout << res  << endl;

  return 0;
}

标签:洛谷,数字,int,num,P1216,数组,三角形,递推,dp
From: https://www.cnblogs.com/againss/p/18250532

相关文章

  • 洛谷 P4343 自动刷题机
    题目链接:自动刷题机思路    二分典题,两个二分判断出可能的最大值和最小值。需要注意当删掉y行代码后,当前代码行数小于0时需要将代码行数重新赋值为0,然后需要注意二分的n最大值的边界,因为x[i]的最大值为1e9,日志最多有1e5行,所以考虑极限情况,日志每一行都是写了1e9行代码,......
  • 洛谷 P1226 快速幂
    题目链接:快速幂思路    简单快速幂模板。a^17=(a^2)^8*a,此时pow()中的y就可以视为17->8(y>>=1),pow()中的x就是底数a->a^2(x*=x),结果res可以视为在循环时多出来的后边乘的a,1->a(res*=x),简单代数推导就会发现y=1的时候,会有res*=x此时的x为a^16,则......
  • 洛谷 P5595 歌唱比赛
    题目链接:歌唱比赛思路    根据题目分析可得,假如小x的点赞数是123111,小y的点赞数是234111,则字符串的第4为到第6位结果都为Z,分别为对比(111,111),(11,11),(1,1),字符串的第三位为Y,为对比(3111,4111),则结果字符串为YYYZZZ。    此时可以轻易判断出字符串中第一个Z后面的所有字母......
  • 洛谷P8807 [蓝桥杯 2022 国 C] 取模
    题目:解读(思路与分析):题目总结:对于给定的整数n和范围m,要找到两个不同的x和y,它们除以n后的余数相等。思路:对于每组给出的n,m询问,可以通过遍历范围从1到m的所有可能的j,并计算n对j取模的余数。使用一个集合来存储已经出现过的余数,如果当前余数已经存在于集......
  • 7-25 数字三角形问题
    7-25数字三角形问题分数10全屏浏览作者 夏仁强单位 贵州工程应用技术学院给定一个由n行数字组成的数字三角形如下图所示。试设计一个算法,计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大。对于给定的由n行数字组成的数字三角形,计算从三角形的顶至底......
  • 洛谷 P2015 二叉苹果树
    题目链接:二叉苹果树思路    本题使用链式向前星存储树上的边,然后DFS搜索+简单dp。    dp数组,dp[i][j]表示节点i及其子树保留k根树枝得到的最大苹果数。son数组存储当前节点的孩子节点的编号和当前节点与孩子节点之间的树枝上的苹果个数。    对于dp递......
  • 龙哥量化:通达信三角形态,划线主图指标公式源码
    如果您需要代写公式,请联系我。龙哥QQ:591438821龙哥微信:Long622889A10304:=REF(HIGH,3)=HHV(HIGH,2*3+1);B10304:=FILTER(A10304,3);C10304:=BACKSET(B10304,3+1);D10304:=FILTER(C10304,3);A20304:=REF(LOW,3)=LLV(LOW,2*3+1);B20304:=FILTER(A20304,3);C20304:=BACKSET......
  • 洛谷 P1352 没有上司的舞会
    题目链接:没有上司的舞会思路题解#include<bits/stdc++.h>usingnamespacestd;#definelllonglongconstintN=1e5+10;intdp[N][2],happy[N],subordinate[N],cnt,head[N],nex[N],edge[N];//链式向前星存储边voidadd(intx,inty){nex[++cnt]=......
  • 洛谷 P1219 八皇后
    题目链接:八皇后思路    这是一个典型的搜索题目,从前往后依次枚举行数,从第一行开始依次枚举皇后的纵坐标,并判断当前坐标是否满足题目要求,满足题目要求则标记将答案存储,并继续向下枚举下一行。由分析可得每条对角线上的任意一点的横纵坐标满足公式i-j+n的值与对角......
  • 洛谷P1601 A+B Problem(高精)
    #include<iostream>#include<string>#include<cstring>#include<cstdio>usingnamespacestd;constintN=1005;structbign{intlen,s[N];bign(){memset(s,0,sizeof(s));len=1;}bign(intnum){*this=num;}......