信息学奥赛一本通1258:数字金字塔
题目
信息学奥赛一本通(C++版)在线评测系统
思路
这一道题大家可以自己先在纸上画一画,不出意外的话,你的答案应该是这样的
算出来答案是63,然而!有一个更优的答案!!
结果是86!
这是为啥嘞?因为我们做题的时候往往会先选大的,这样和就会更大的,但是这样只能保证局部最优解,但是没办法保证全局最优解(贪心的思想)。
所以到底该怎么做呢?动态规划。
动态规划,英文简称dp,主要思想:先列出各种可能的局部解,再根据某种判定条件,舍弃肯定得不到最优解的局部解,在每一步都经过筛选,以每一步都是最优解来保证全局最优解
听不懂?很正常!再举个例子。
现在有一个数字塔,a[]
5
8 3
12 7 16
4 10 11 6
9 5 3 9 4
求最大值
可以这样,打一个dp表
怎么来的呢?
每个点都是:两个来源:
dp[i-1][j],dp[i-1][j-1]取大值加上`a[i][j]` -->状态转移方程式
dp[i][j]=max(dp[i-1][j],dp[i-1][j-1])+a[i][j]
任何一个i,j只跟自己和上一行有关。这就是后无效性原则
代码实现
注意dp写代码索引都从1开始,不要用0,不然又能索引会有-1的情况
#include <iostream>
using namespace std;
typedef long long ll;int a[1010][1010]; //数字塔
int dp[1010][1010]; //dp表int main(){int n;cin>>n;for(int i=1;i<=n;i++){for(int j=1;j<=i;j++){cin>>a[i][j]; //输入}}dp[1][1]=a[1][1];for(int i=2;i<=n;i++){for(int j=1;j<=i;j++){ dp[i][j]=max(dp[i-1][j],dp[i-1][j-1])+a[i][j]; //状态转移方程式}}int mx=1;for(int i=2;i<=n;i++){if(dp[n][i]>dp[n][mx]) mx=i; //在最底层寻找最大值}cout<<dp[n][mx]; //输出return 0;
}
完结撒花~
信息学奥赛一本通1258:数字金字塔相关推荐
- 信息学奥赛一本通 1258:【例9.2】数字金字塔
[题目链接] ybt 1258:[例9.2]数字金字塔 [题目考点] 1. 记忆化搜索 2. 动态规划基本型 [解题思路] 思路1:一般深搜(非正确解) 每到一个位置,更新加和,向左下,右下两个方向搜 ...
- 信息学奥赛一本通1258:【例9.2】数字金字塔题解
[题目表述] [考点分析] 动态规划 [解题思路] 样例金字塔可以看成下面的形式方便使用数组来处理: 13 11 8 12 7 26 6 14 15 8 12 7 13 ...
- 信息学奥赛一本通(基础算法与数据结构-题解汇总目录)
信息学奥赛一本通(C++版)在线评测系统 基础(二)基础算法 更新中...... 第一章高精度计算 1307[例1.3]高精度乘法 1308[例1.5]高精除 1309[例1.6]回文数(Noip ...
- 信息学奥赛一本通(C++版) 第二部分 基础算法 第九章 动态规划
总目录详见:https://blog.csdn.net/mrcrack/article/details/86501716 信息学奥赛一本通(C++版) 第二部分 基础算法 第九章 动态规划 第一节 动 ...
- 信息学奥赛一本通 (C++)上机练习
信息学奥赛一本通(C++)上机练习 此书为娃儿的第一本刷题书.娃儿现在四年级 ,希望他能坚持下来.特开贴加油 luogu: disangan223 第一部分 C++语言 第一章 C++语言入门 T10 ...
- 信息学奥赛一本通 1358:中缀表达式值(expr)
[题目链接] ybt 1358:中缀表达式值(expr) [题目考点] 1. 表达式求值 中缀表达式转后缀表达式 后缀表达式求值 [解题思路] 由于题目要求做中缀表达式转为后缀表达式,而后求值.那么这 ...
- 信息学奥赛一本通 1356:计算(calc)
[题目链接] ybt 1356:计算(calc) [题目考点] 1. 表达式求值 中缀表达式求值 2. 表达式树 表达式树:一棵表达式树可以表示一系列的运算. 表达式树中的结点包括运算符与数值 str ...
- 信息学奥赛一本通 2021:【例4.6】最大公约数
[题目链接] ybt 2021:[例4.6]最大公约数 [题目考点] 1. while循环 2. 求最大公约数 辗转相减法 辗转相除法 [解题思路] 解法1:枚举 取较小数字,从该数字的值开始从大到小 ...
- 移动玩具(信息学奥赛一本通-T1453)
[题目描述] 在一个 4×4 的方框内摆放了若干个相同的玩具,某人想将这些玩具重新摆放成为他心中理想的状态,规定移动时只能将玩具向上下左右四个方向移动,并且移动的位置不能有玩具,请你用最少的移动次数将 ...
最新文章
- items属性的combo_【内存消耗问题】DataGridViewComboboxColoumn关于Items属性和DataSource属性的性能开销问题...
- python自学网站有哪些-Python学习网站有哪些?Python基础教程网站推荐
- python reduce函数_Python reduce函数作用及实例解析
- [NOIP2006] 数列
- 【今晚七点半】:对话平行未来姜雨晴——重启熊猫直播背后的故事
- LiveVideoStackCon 2020北京站-售票通道关闭倒计时1天
- 2020第十一届蓝桥杯软件类省赛第二场C/C++ 大学 B 组(题解)
- matlab空格会消失了,如何在Matlab中自动删除保存的尾随空格?
- hdu 3652 B-number 数位dp
- 关于对象的思考(二)
- 表格存储如何实现跨区域的容灾
- NFT 项目的 7 种市场营销策略
- iphone4屏幕各部分尺寸
- html绑定drag事件,html 5自带drag属性详解
- SpringSecurity授权
- VSCODE使用EmbeddedIDE插件开发51单片机
- Pyinstaller打包
- .html扩展名的文件类型,JS 获取文件后缀,判断文件类型(比如是否为图片格式)...
- c语言编程一对新出生的兔子,C语言 有一对兔子。从出生后第三个月起每个月都生一对兔子,小兔子长到三个月后又生一对小兔子,假如兔子都不死,问每个月的兔子总数为多少。...
- 微信小程序相册-笔记1