数字三角形


总时间限制: 1000ms 内存限制: 65536kB



描述

7
3 8
8 1 0
2 7 4 4
4 5 2 6 5

(图1)
图1给出了一个数字三角形。从三角形的顶部到底部有很多条不同的路径。对于每条路径,把路径上面的数加起来可以得到一个和,你的任务就是找到最大的和。

输入

输入的是一行是一个整数N(100>=N>=1),给出三角形的行数。下面的N行给出数字三角形。数字三角形上的数的范围都在0和100之间。

输出

输出最大的和。

样例输入

5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5

样例输出

30

思路

1.搜索

#include<bits/stdc++.h>
using namespace std;
int a[105][105],s;
int dfs(int i,int j)
{
if(i==s)
return a[i][j];
return a[i][j]+max(dfs(i+1,j),dfs(i+1,j+1));
}
int main()
{
cin>>s;
for(int i=1;i<=s;i++)
for(int j=1;j<=i;j++)
cin>>a[i][j];
cout<<dfs(1,1);
return 0;
}

时间复杂度为\(O(2^n)\),最大为\(O(2^{100}),\)超时。

2.记忆化搜索

#include<bits/stdc++.h>
using namespace std;
int a[105][105],s,b[105][105];
int dfs(int i,int j)
{
if(i==s)
return a[i][j];
if(b[i][j]!=0)
return b[i][j];
b[i][j]=a[i][j]+max(dfs(i+1,j),dfs(i+1,j+1));
return b[i][j];
}
int main()
{
cin>>s;
for(int i=1;i<=s;i++)
for(int j=1;j<=i;j++)
cin>>a[i][j];
cout<<dfs(1,1);
return 0;
}

由于每个位置只搜索了一次,所以时间复杂度为\(O(n^2)\),通过 ! ! !

3.递推(顺推)

#include<bits/stdc++.h>
using namespace std;
int a[105][105],s;
int main()
{
cin>>s;
cin>>a[1][1];
for(int i=2;i<=s;i++)
{
cin>>a[i][1];
a[i][1]+=a[i-1][1];
for(int j=2;j<=i;j++)
{
cin>>a[i][j];
a[i][j]+=max(a[i-1][j],a[i-1][j-1]);
}
}
int maxx=-1;
for(int j=1;j<=s;j++)
maxx=max(maxx,a[s][j]);
cout<<maxx;
return 0;
}

同样,时间复杂度为\(O(n^2)\),通过 。

4.递推(逆推)

#include<bits/stdc++.h>
using namespace std;
int a[105][105],s;
int main()
{
cin>>s;
for(int i=1;i<=s;i++)
for(int j=1;j<=i;j++)
cin>>a[i][j];
for(int i=s-1;i>=1;i--)
for(int j=1;j<=i;j++)
a[i][j]+=max(a[i+1][j],a[i+1][j+1]);
cout<<a[1][1];
return 0;
}

不用多说,时间复杂度也为\(O(n^2),\)通过。


&nbsp 以上便是此题的多种解法,欢迎下次再来。

最新文章

  1. C#进阶系列——DDD领域驱动设计初探(三):仓储Repository(下)
  2. &lt;停车卫&gt; 产品需求说明书 version 2.0
  3. React.js 常用技术要点
  4. [原创]java WEB学习笔记91:Hibernate学习之路-- -HQL 迫切左外连接,左外连接,迫切内连接,内连接,关联级别运行时的检索策略 比较。理论,在于理解
  5. OkHttp 详解
  6. 【caffe-windows】 caffe-master 之 cifar10 超详细
  7. 黑盒测试用例设计方法&amp;理论结合实际 -&gt; 边界值分析法
  8. Lintcode--010(最长上升子序列)
  9. String的构造函数、析构函数和赋值函数
  10. 关于python抓取google搜索结果的若干问题
  11. 怎样使用yum安装OpenStack
  12. 解决虚拟机连接不上外网,不能互相ping通
  13. MySQL建表 TIMESTAMP 类型字段问题
  14. Spring(1)_Bean初始化
  15. 注解@RestController与@Controller的区别
  16. Winform 基础二 最小化 最大化 关闭 点击任务栏隐藏显示 点击鼠标左键移动窗体
  17. Python MRO_C3
  18. 数据结构与算法Java描述 队列
  19. eclipse如何为java项目生成API文档、JavaDoc
  20. 如何让PictureBox背景色透明

热门文章

  1. Python学习笔记之测试函数
  2. VS Code如何在浏览器中打开Html文件?
  3. MySQL容器化详细教程
  4. 05. redis事务
  5. Firefox火狐浏览器打开新标签页一直闪烁
  6. 第一部分day5 文件操作
  7. 两数相加[链表加法] LeetCode.2
  8. Two-Stream Adaptive Graph Convolutional Network for Skeleton-Based Action Recognition
  9. JS高阶---简介+数据类型
  10. IDEA中常用的一些设置