数字三角形

  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. Qt是什么?Qt简介(非常全面)

    http://c.biancheng.net/view/1792.html Qt(官方发音 [kju:t],音同 cute)是一个跨平台的 C++ 开发库,主要用来开发图形用户界面(Graphical ...

  2. MFC学习笔记1---准备工作

    什么是MFC MFC,全称Microsoft Foundation Classes,微软基础类库,顾名思义,是微软的攻城狮们将一些常用的基础的Windows API 函数用C++的形式封装成类,简化程 ...

  3. EFL - Championship

    Swansea City       Charlton AthleticBristol CityLeeds UnitedPreston North EndWest Bromwich AlbionQue ...

  4. Linux之bash的变量

    1. 变量的显示,echo echo $变量   或    echo ${变量} eg. echo $HOME   或   echo ${HOME} 2. 变量的设置 变量的设置规则: (1)变量与变 ...

  5. Centos 学习之路:基础(1)

    冯·诺伊曼计算机模型: 采用二进制数表示程序和数据: 能存储程序和数据,并能自动控制程序的执行: 具备运算器.控制器.存储器.输入设备和输出设备5个基本部分. CPU:是控制器及运算器 CPU的架构类 ...

  6. java Class类使用

    1.forName public static Class<?> forName(String className) throws ClassNotFoundException 返回与带有 ...

  7. python 删除/app/*/logs/*/*.logs指定多少天的文件

    # encoding: utf-8 import sys import getopt import os import glob import time import datetime def rem ...

  8. 0-4评价一个语言模型Evaluating Language Models:Perplexity

    有了一个语言模型,就要判断这个模型的好坏. 现在假设: 我们有一些测试数据,test data.测试数据中有m个句子;s1,s2,s3-,sm 我们可以查看在某个模型下面的概率: 我们也知道,如果计算 ...

  9. CSS3实现三角形和对话框

    这是最终实现的效果,类似于微信对话框的样式. 分析一下这个对话框的结构,由一个小三角形和一个长方形构成.长方形很容易就可以实现,重点是如何用CSS3做出一个小三角形. 一.如何生成一个三角形  总结: ...

  10. 2,Executor线程池

    一,Executor框架简介 在Java 5之后,并发编程引入了一堆新的启动.调度和管理线程的API.Executor框架便是Java 5中引入的,其内部使用了线程池机制,它在java.util.co ...