当前位置:网站首页>一本通1258——数字金字塔(动态规划)
一本通1258——数字金字塔(动态规划)
2022-08-09 03:02:00 【竹林居士-】
题目
原题链接
http://ybt.ssoier.cn:8088/problem_show.php?pid=1258【题目描述】
观察下面的数字金字塔。写一个程序查找从最高点到底部任意处结束的路径,使路径经过数字的和最大。每一步可以从当前点走到左下方的点也可以到达右下方的点。

在上面的样例中,从13到8到26到15到24的路径产生了最大的和86。
【输入】
第一个行包含R(1≤R≤1000),表示行的数目。
后面每行为这个数字金字塔特定行包含的整数。
所有的被供应的整数是非负的且不大于100。
【输出】
单独的一行,包含那个可能得到的最大的和。
【输入样例】
5 13 11 8 12 7 26 6 14 15 8 12 7 13 24 11
【输出样例】
86
思路
这道题需要用动态规划来做,不能用贪心
每次从他的下面两个分支中选最大的即可。可以借助深度优先搜索实现。
直接用深度优先搜索会超时 ,因此需要加上记忆化
步骤
1.定义变量
const int N=1010;
int a[N][N],mk[N][N];
int n;
2.定义深搜函数
int dfs(int x,int y)
{
if(x>n) return 0;
if(mk[x][y]!=-1) return mk[x][y];
return mk[x][y]=max(dfs(x+1,y),dfs(x+1,y+1))+a[x][y];
}3.主程序
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=i;j++){
cin>>a[i][j];
}
}
memset(mk,-1,sizeof(mk));
cout<<dfs(1,1)<<endl;
return 0;
}完整代码
#include<bits/stdc++.h>
using namespace std;
const int N=1010;
int a[N][N],mk[N][N];
int n;
int dfs(int x,int y)
{
if(x>n) return 0;
if(mk[x][y]!=-1) return mk[x][y];
return mk[x][y]=max(dfs(x+1,y),dfs(x+1,y+1))+a[x][y];
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=i;j++){
cin>>a[i][j];
}
}
memset(mk,-1,sizeof(mk));
cout<<dfs(1,1)<<endl;
return 0;
}新手,请多多指教
边栏推荐
- JSP入门
- 并查集相关知识点
- 20220523搜索和排序:搜索旋转排序数组
- Redis的过期策略和淘汰策略
- C专家编程 第9章 再论数组 9.3 为什么C语言把数组形参当做指针
- Day021 图书管理系统(对象和数组)
- Likou Brush Question Record 4.1-----209. The sub-array with the smallest length
- 原文翻译:Structure Aware Single-stage 3D Object Detection from Point Cloud
- leetcode-23.合并K个升序链表
- 全文翻译:Multimodal Neural Networks: RGB-D for Segmantic Segmentation and Object Detection
猜你喜欢

ARM开发(二)ARM体系结构——ARM,数据和指令类型,处理器工作模式,寄存器,状态寄存器,流水线,指令集,汇编小练习题

Kubernetes:(十四)安全机制(一定要做好安全措施哦)

lvs+keepalived高可用负载均衡集群

多态 polymorphism

Building PO layered architecture of automated testing framework from 0

JS 运行机制最全面的一次梳理

What aspects should we start with for interface security testing?

原文翻译:Structure Aware Single-stage 3D Object Detection from Point Cloud

掌握 TypeToken 原理及泛型擦除

【信号去噪】基于Sage-Husa自适应卡尔曼滤波器实现海浪磁场噪声抑制及海浪磁场噪声的产生附matlab代码
随机推荐
Qt 信号槽connect的同步与异步处理
leetcode-23.合并K个升序链表
【es6】教程 Symbol数据以及迭代器和生成器
C专家编程 第9章 再论数组 9.2 为什么会发生混淆
Hudi从内核到实战介绍
C专家编程 第9章 再论数组 9.7 轻松一下---软件/硬件平衡
flat() :递归地将数组展平到指定的深度
开发工程师必备————【Day05】UDP协议;进程的并发与并行
20220526动态规划:不同路径
VSCode使用总结
图论相关知识
C专家编程 第9章 再论数组 9.4 数组片段的下标
多线程 (进阶+初阶)
【面试整理】-- 多线程
那些关于DOM的常见Hook封装(一)
Ingress的概念和原理
【Redis】主从复制的核心原理
2022-08-08 第五小组 顾祥全 学习笔记 day31-集合-Junit单元测试
i18n 国际化
jsx定义与规则