当前位置:网站首页>一本通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;
}
新手,请多多指教
边栏推荐
- Recently, I have seen a lot of people who want to study by themselves or enroll in classes but don’t know how to choose. I will tell you about it today.
- 20220523搜索和排序:搜索旋转排序数组
- ERROR:Module not found: Error: Can‘t resolve ‘core-js/modules/es.promise.js‘ in ‘address‘
- 普通人如何增加收入
- Chapter2多元函数
- 加密公司集体裁员 以应对加密寒冬和通货膨胀?现加密总市值低于1万亿美元
- 书签收藏难整理?这款书签工具管理超方便
- C专家编程 第10章 再论指针 10.1 多维数组的内存布局
- C专家编程 第9章 再论数组 9.6 C语言的多维数组
- Likou Brush Question Record 1.5-----367. Valid perfect squares
猜你喜欢
随机推荐
126. 单词接龙 II
Jenkins configuration nail notification
二分搜索法和二叉搜索树
1.02亿美元从数字资产基金撤出!BTC价格已经触底!预示下跌趋势即将逆转?
What are the most popular automated testing tools in 2022?The most complete and most detailed of the entire network is here
C专家编程 第10章 再论指针 10.1 多维数组的内存布局
多态 polymorphism
redis集群详解
button click animation
ReentrantLock源码分析
Qt 信号槽connect的同步与异步处理
搭建Eureka注册中心集群 ,实现负载均衡
全文翻译:Multimodal Neural Networks: RGB-D for Segmantic Segmentation and Object Detection
渗透测试-域环境下的信息收集
如何实现有状态转化操作
Kubernetes:(十五)PV与PVC的《恩怨情仇》
Kubernetes:(十四)安全机制(一定要做好安全措施哦)
通过kvm创建共享磁盘
使用TensorRT对AlphaPose模型进行加速
多御安全浏览安卓版升级尝鲜,新增下载管理功能