[IOI 1994]数字三角形
数字三角形
总时间限制: 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),\)通过。
  以上便是此题的多种解法,欢迎下次再来。
[IOI 1994]数字三角形的更多相关文章
- G:数字三角形
总时间限制: 1000ms 内存限制: 65536kB描述73 88 1 02 7 4 44 5 2 6 5 (图1) 图1给出了一个数字三角形.从三角形的顶部 ...
- 4829 [DP]数字三角形升级版
4829 [DP]数字三角形升级版 时间限制: 1 s 空间限制: 16000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 从数字三角形的顶部(如图, ...
- 【递归】数字三角形 简单dp
[递归]数字三角形 题目描述 对于大多数人来说,“我们是这么的正常,因此也就这么的平庸.”而天才总是与众不同的,所以当邪狼问修罗王:“老大,你蹲在那儿一动不动看了有半个小时了,蚂蚁有那么好看吗?” 修 ...
- hihocoder 1037 数字三角形
#1037 : 数字三角形 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 问题描述 小Hi和小Ho在经历了螃蟹先生的任务之后被奖励了一次出国旅游的机会,于是他们来到了大洋彼岸 ...
- lintcode:数字三角形
题目: 数字三角形 给定一个数字三角形,找到从顶部到底部的最小路径和.每一步可以移动到下面一行的相邻数字上. 样例 比如,给出下列数字三角形: [ [2], [3,4], [6 ...
- 1989-C. 数字三角形
描述 如图所示,是一个数字搭成的三角形. 若起始位置在三角形的顶端,结束位置在三角形底边,每一步只能向下方或向右下角移动一格.请编程计算一条路径,使得路径上经过的数字和最大.(图中路径7→3→8→7→ ...
- 洛谷P1118 数字三角形游戏
洛谷1118 数字三角形游戏 题目描述 有这么一个游戏: 写出一个1-N的排列a[i],然后每次将相邻两个数相加,构成新的序列,再对新序列进行这样的操作,显然每次构成的序列都比上一次的序列长度少1,直 ...
- HDU 1176 免费馅饼(数字三角形)
免费馅饼 Problem Description 都说天上不会掉馅饼,但有一天gameboy正走在回家的小径上,忽然天上掉下大把大把的馅饼.说来gameboy的人品实在是太好了,这馅饼别处都不掉,就掉 ...
- [CODEVS1220]数字三角形
题目描述 Description 如图所示的数字三角形,从顶部出发,在每一结点可以选择向左走或得向右走,一直走到底层,要求找出一条路径,使路径上的值最大. 输入描述 Input Description ...
随机推荐
- C#自定义消息函数,需要一个TextBox,一个委托,直接上代码;
private delegate void de_OutputMessage(string str); public void OutputMessage(string str) { if (text ...
- Python——Scrapy爬取链家网站所有房源信息
用scrapy爬取链家全国以上房源分类的信息: 路径: items.py # -*- coding: utf-8 -*- # Define here the models for your scrap ...
- 基于Custom-metrics-apiserver实现Kubernetes的HPA(内含踩坑)
前言 这里要说一下Prometheus的检控指标从哪里来,它有3个渠道: 主机监控,也就是部署了Node Exporter组件的主机,它以DaemonSet或者系统进程的形式运行,Prometheus ...
- Promise 封装 ajax
Promise 封装ajax 成链式结构: var url = 'http'; function(method, url) { return new Promise(function(res, ret ...
- kingbase常用语句
1. 查询数据库名 # select * from SYS_DATABASE; 2. 查询模式名 # select * from SYS_NAMESPACE; 3. 查询表空间 # select * ...
- pip requirements.txt
生成文件 pip freeze > requirements.txt 依赖库会导到于requirements.txt 比如: image.png 从requirements.txt安装依赖库 ...
- Linux从入门到放弃、零基础入门Linux(第一篇):计算机操作系统简介、linux介绍
一.计算机操作系统简介 操作系统的定义: 操作系统是一个用来协调.管理和控制计算机硬件和软件资源的系统程序,它位于硬件和应用程序之间. 操作系统的内核的定义: 操作系统的内核是一个管理和控制程序,负责 ...
- Python 二维码制作
Python 二维码制作 先介绍python 二维码制作的第三方库 QRCode .MyQR QRCode 生成这个二维码只用三行 import qrcode img = qrcode.make ...
- 关于Jackson中JsonNode的取值asText()和textValue()区别
在 比较高版本的Jackson 中, 包名为 com.fasterxml.jackson String jsonText="{\"name\":\"张三\&qu ...
- pyecharts的使用
折线图1 import pyecharts.options as opts from pyecharts.charts import Line x_data = ["Mon", ...