简单DP入门(一) 数字三角形
数字三角形
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入门(一) 数字三角形的更多相关文章
- HDU 2084 数塔(简单DP入门)
数塔 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...
- dp递推 数字三角形,dp初学者概念总结
数字三角形(POJ1163) 在上面的数字三角形中寻找一条从顶部到底边的路径,使得路径上所经过的数字之和最大.路径上的每一步都只能往左下或 右下走.只需要求出这个最大和即可,不必给出 ...
- 简单DP入门(二) 最长上升子序列及其优化
最长上升子序列解决问题: 有N个数,求出它最长的上升子序列并输出长度. 在题里不会讲的这么直白,这个算法往往会与其他的算法混在一起使用. 在这篇文章中不会出现其他的例题,为了让大家更好的理解,我只会对 ...
- 简单DP入门四连发
复习一下一直不太懂的dp. dp博大精深,路还长着呢 第一题;http://acm.hdu.edu.cn/showproblem.php?pid=2084 从下往上就是水题 #include<c ...
- 数字三角形 (DP入门)
7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 给出一个数字三角形.从三角形的顶部到底部有很多条不同的路径 ...
- 【递归】数字三角形 简单dp
[递归]数字三角形 题目描述 对于大多数人来说,“我们是这么的正常,因此也就这么的平庸.”而天才总是与众不同的,所以当邪狼问修罗王:“老大,你蹲在那儿一动不动看了有半个小时了,蚂蚁有那么好看吗?” 修 ...
- 数字三角形 (简单DP)
问题描述 小Hi和小Ho在经历了螃蟹先生的任务之后被奖励了一次出国旅游的机会,于是他们来到了大洋彼岸的美国.美国人民的生活非常有意思,经常会有形形色色.奇奇怪怪的活动举办,这不,小Hi和小Ho刚刚下飞 ...
- DP入门(1)——数字三角形问题
一.问题描述 如上图所示,有一个由非负整数组成的三角形,第一行只有一个数,除了最下行之外每个数的左下方和右下方各有一个数.现请你在此数字三角形中寻找一条从首行到最下行的路径,使得路径上所经过的数字之和 ...
- 【线性DP】数字三角形
题目链接 原题链接 题目描述 给定一个如下图所示的数字三角形,从顶部出发,在每一结点可以选择移动至其左下方的结点或移动至其右下方的结点,一直走到底层,要求找出一条路径,使路径上的数字的和最大. 7 3 ...
随机推荐
- IOS绘图详解(http://blog.163.com/wkyuyang_001/blog/static/10802122820133190545227/)
14.1 Quartz概述 Quartz是Mac OS X的Darwin核心之上的绘图层,有时候也认为是CoreGraphics.共有两种部分组成Quartz: Quartz Compositor,合 ...
- Docker 启动与停止容器
启动已运行过的容器 docker start 容器名称|容器id 如: docker start mycentos 启动所有运行过的容器(注意:反单引号` `), docker ps -a -q 是查 ...
- C++函数声明与定义
一个C++函数,如果没有函数声明而只有函数定义,程序照样运行,但要求这个函数定义必须放在main函数之前,否则编译按照从上到下的顺序扫描下来,就会出现编译器不认识它的情况. 如果一个程序同时有函数声明 ...
- CIC许可更新
打开IA软件,点击软件中的[License],可以查看当前许可是否可用或者过期,如果过期,点击下方的[Load License],选择最新的I3许可文件加载,重启电脑.
- 02-第一个Python程序
第一个HelloPython程序 1.1Python源程序的基本概念 Python源程序是一个特殊格式的文本文件,可以使用任意文本编辑软件做Python的开发 Python程序的文件扩展名通常都是.p ...
- Flask【第4篇】:用Flask的扩展实现的简单的页面登录
用flask的扩展实现的简单的页面登录 from flask import Flask,render_template,request,redirect,session app = Flask(__n ...
- MongoDB之自动启动服务
安装详细步骤请点我 为了能让NoSQLBooster for MongoDB连接的时候不报错,将mongodb添加到系统服务中. 在C:\Program Files\MongoDB\Server\3. ...
- linux运维、架构之路-Kubernetes离线、二进制部署集群
一.Kubernetes对应Docker的版本支持列表 Kubernetes 1.9 <--Docker 1.11.2 to 1.13.1 and 17.03.x Kubernetes 1.8 ...
- php array_unshift()函数 语法
php array_unshift()函数 语法 作用:用于向数组插入新元素.新数组的值将被插入到数组的开头.富瑞华 语法:array_unshift(array,value1,value2,valu ...
- codevs 2039 骑马修栅栏 USACO x
题目描述 Description Farmer John每年有很多栅栏要修理.他总是骑着马穿过每一个栅栏并修复它破损的地方. John是一个与其他农民一样懒的人.他讨厌骑马,因此从来不两次经过一个栅栏 ...