数字三角形

  aaarticlea/png;base64,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" alt="" />

  这道题的题意很简单,从最上的一个点向下走,求出走到最下方获得的最大分数(路径最大和)。

  很明显我们如果从上方向下走的话很难的出答案,要把每条路都走一遍然后再比较哪一条路权值之和比较大然后求出答案。这种求法无疑很麻烦,所以我们就在想如何进行优化,上一种解法中我们对于走某个点的最大值算了很多遍,但是我们使用的时候还是要再走一遍,重新搜索,造成了时间复杂度很高,所以我们可以将走某个点可以获得的最大值记录下来,进而在用的时候直接调用。为了更好的计算出这个值,我们将一个大三角形分为多个小三角形,求解小三角形的问题。 就从底部这个12 7 6 的三角形来说,如果要走6这个点,那么接下来可以获得的最大值是12,所以我们就可以将6这个点的值标记成6+12=18 即是走这个点可以获得的值,同样的,7 13 14的三角形也可以这么算,因为13>7所以走14这个点可以获得的最大值就是13,将14标记成14+13=27 ,13 24 15这个三角形同样的操作:将15标记成走这个点可以获得的最大值:15+24=39. 24 11 8的三角形同样,将8标记成32。做完这些后,我们继续向上一层推,因为现在倒数第二层的每个点都已经记录了最后一层的最优结果,所以我们可以无视最后一层了,将第4层当作最后一层继续刚刚的操作,对于18(原来6) 27(原来14) 12组成的三角形走12这个点可以得到的最大分数为12+27=39. 27 39 7同样,将7标记成7+39=46 .39 32 26 同样,将26标记成26+39=65. 现在我们又抹掉了一层,将第3层当作最后一层,继续刚刚的操作。对于39(原来12) 46(原来7) 11构成的三角形将11更新成11+36=57.  对于46(原来7) 65(原来26) 8组成的三角形,将8更新成8+65=73 . 现在只剩下两层了。原来的11被更新成了57,原来的8更新成了73.所以最后的13应该选73走,所以整个三角形最大值为13+73(原来8)=86。

Code:

#include<iostream>
#include<cstdio>
using namespace std;
int a[][];
int n;
int main()
{
int k=;
cin>>n;
for(int i=;i<=n;i++)
{
for(int j=;j<=i;j++)
{
cin>>a[i][j];
}
}
a[][]+=a[][];
a[][]+=a[][];
for(int i=;i<=n;i++)
{
for(int j=;j<=i;j++)
{
if(a[i-][j]>a[i-][j-]) a[i][j]=a[i][j]+a[i-][j];
else a[i][j]+=a[i-][j-];
}
}
for(int i=;i<=n;i++)
{
if(a[n][i]>=k) k=a[n][i];
}
cout<<k;
}

  这道题是动态规划的入门题,虽然简单却可以很好的体现了动态规划的基本思想。刚学动态规划的同学可以看一下,理解这种分阶段解决问题的方法,省略多余的步骤以达到降低时间复杂度效果。

动态规划是将一个大问题简化为小问题以快速求出最优解的算法,要素有状态和转移方程两项,在算法竞赛及各个领域中至关重要,是数学运筹学的一个分支。

  谢谢阅读。

  

简单DP入门(一) 数字三角形的更多相关文章

  1. HDU 2084 数塔(简单DP入门)

    数塔 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...

  2. dp递推 数字三角形,dp初学者概念总结

    数字三角形(POJ1163)          在上面的数字三角形中寻找一条从顶部到底边的路径,使得路径上所经过的数字之和最大.路径上的每一步都只能往左下或 右下走.只需要求出这个最大和即可,不必给出 ...

  3. 简单DP入门(二) 最长上升子序列及其优化

    最长上升子序列解决问题: 有N个数,求出它最长的上升子序列并输出长度. 在题里不会讲的这么直白,这个算法往往会与其他的算法混在一起使用. 在这篇文章中不会出现其他的例题,为了让大家更好的理解,我只会对 ...

  4. 简单DP入门四连发

    复习一下一直不太懂的dp. dp博大精深,路还长着呢 第一题;http://acm.hdu.edu.cn/showproblem.php?pid=2084 从下往上就是水题 #include<c ...

  5. 数字三角形 (DP入门)

    7 3     8 8     1     0 2     7     4     4  4     5     2     6     5 给出一个数字三角形.从三角形的顶部到底部有很多条不同的路径 ...

  6. 【递归】数字三角形 简单dp

    [递归]数字三角形 题目描述 对于大多数人来说,“我们是这么的正常,因此也就这么的平庸.”而天才总是与众不同的,所以当邪狼问修罗王:“老大,你蹲在那儿一动不动看了有半个小时了,蚂蚁有那么好看吗?” 修 ...

  7. 数字三角形 (简单DP)

    问题描述 小Hi和小Ho在经历了螃蟹先生的任务之后被奖励了一次出国旅游的机会,于是他们来到了大洋彼岸的美国.美国人民的生活非常有意思,经常会有形形色色.奇奇怪怪的活动举办,这不,小Hi和小Ho刚刚下飞 ...

  8. DP入门(1)——数字三角形问题

    一.问题描述 如上图所示,有一个由非负整数组成的三角形,第一行只有一个数,除了最下行之外每个数的左下方和右下方各有一个数.现请你在此数字三角形中寻找一条从首行到最下行的路径,使得路径上所经过的数字之和 ...

  9. 【线性DP】数字三角形

    题目链接 原题链接 题目描述 给定一个如下图所示的数字三角形,从顶部出发,在每一结点可以选择移动至其左下方的结点或移动至其右下方的结点,一直走到底层,要求找出一条路径,使路径上的数字的和最大. 7 3 ...

随机推荐

  1. windows用ffmpeg实现视频剪切

    1.安装ffmpeg 从官网下载适合自己版本的FFmpeg,网址是http://ffmpeg.org/download.html,在get the packages中点击windows builds ...

  2. 长沙理工大学第十二届ACM大赛-重现赛 D 小M和天平 (01背包)

    链接:https://ac.nowcoder.com/acm/contest/1/D 来源:牛客网 小M和天平 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 131072K,其他语言 ...

  3. 2019 蓝桥杯国赛 B 组模拟赛 E 蒜头图 (并查集判环)

    思路: 我们看条件,发现满足条件的子图无非就是一些环构成的图, 因为只有形成环,才满足边的两个点都在子图中,并且子图中节点的度是大于0的偶数. 那么如果当前有k个环,我们可以选2^k-1个子图,为什么 ...

  4. GUI学习之二十九—QFileDialog学习总结

    今天学习的是文件对话框——QFileDialog 一.描述 QFileDialog提供了一个对话框,允许用户选择文件或者目录,也允许用户遍历文件系统,用以选择一个或多个文件或者目录. QFileDia ...

  5. C#基础知识之System.AppDomain类

    进程是存在独立的内存和资源的,但是AppDomain仅仅是逻辑上的一种抽象.一个process可以存在多个AppDomain.各个AppDomain之间的数据时相互独立的.一个线程可以穿梭多个AppD ...

  6. Netty学习--第一章 JDK自带的BIO

    一.什么是BIO BIO是传统的通信技术,在BIO通信模型中,客户端发送请求给服务器,服务器每次都是会单独创建一个线程来监控客户端的请求,会为每个客户端创建一个线程来处理请求.当前服务器处理完成后,通 ...

  7. gperftools尝试

    最近在找windows下比较好用的函数时间统计的库,听同事说gperftools是跨平台的,就下载下来尝试了一把.发现它确实实现了windows上可以调用的dll库文件(tcmalloc_minima ...

  8. TLS漏洞:超过50万个电子邮件服务器容易受黑客攻击,太可怕了

    2019年在流行的开源Exim电子邮件服务器软件中发现了一个关键的远程执行代码漏洞,至少有超过50万个电子邮件服务器容易受到远程黑客攻击.Exim是一种广泛使用的开源邮件传输代理(MTA)软件,为类似 ...

  9. iView栅格的使用

    一般情况下栅格系统都会把每行row分为12列,但是iview是采用了24栅格系统,将区域进行24等分 基础用法 实例代码: <template> <Row> <Col s ...

  10. BZOJ 3043: IncDec Sequence 差分 + 思维

    Code: #include <bits/stdc++.h> #define setIO(s) freopen(s".in","r",stdin) ...