洛谷p1216 IOI1994 Day1T1

洛谷原题

题目描述

观察下面的数字金字塔。

写一个程序来查找从最高点到底部任意处结束的路径,使路径经过数字的和最大。每一步可以走到左下方的点也可以到达右下方的点。

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

在上面的样例中,从7 到 3 到 8 到 7 到 5 的路径产生了最大

输入输出格式

输入格式:

第一个行包含 R(1<= R<=1000) ,表示行的数目。

后面每行为这个数字金字塔特定行包含的整数。

所有的被供应的整数是非负的且不大于100。

输出格式:

单独的一行,包含那个可能得到的最大的和。

输入输出样例

输入样例#1:

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

输出样例#1:

30

说明

题目翻译来自NOCOW。

USACO Training Section 1.5

IOI1994 Day1T1


Solution

用一个二维数组存储三角形a[i][j]表示第i行的j个数

1、划分阶段

以每一行为阶段

2、确定状态

用f[i][j]表示状态,表示从第i行第j个开始向下走,所可得的最大值

3、状态转移方程

4、


递推--逆推

先用从下到上的算法

code

 //逆推
#include<iostream>
using namespace std;
int max(int a,int b){return a>b?a:b;}
int main(){
int r;
cin>>r;
int triangle[r][r];
for(int i=;i<r;i++)//行
for(int j=;j<i+;j++)//列
cin>>triangle[i][j]; for(int i=r-;i>=;i--)
for(int j=r-;j>=;j--)
triangle[i][j]+=max(triangle[i+][j],triangle[i+][j+]);
cout<<triangle[][];
return ;
}

看!代码是如此的简洁,结构是如此的清晰!

算法讲解

行8~11:输入三角形。

由于三角形一行的个数是行行递增的,

所以

10 for(int j=0;j<i+1;j++)//列 

可以使得每行的j的最大值与行号相等。

行13~16:递归计算

从倒数第二行的最后一个数开始,把每一个数([i][j])都加上(+=)它下面的数([i+1][j]),右下角的数([i+1][j+1])中的最大值(max(a,b)).

这里有一个我开始犯的错误:

13 for(int i=r-2;i>=0;i--)
14 for(int j=r-2;j>=0;j--)
15 triangle[i][j]+=max(triangle[i+1][j],triangle[i+1][j+1]);
16 cout<<triangle[0][0];

为什么这里是r-2呢?(之前我就在这里被坑了,本地测试数据答案超大.....)

理解一下:

首先,r是三角形的长宽

又∵第一行第一列是(0,0)

∴最后一行最后一列是(r-1,r-1)

又∵我们是从倒数第二行的最后一个数开始回归的

∴这个数为(r-2,r-2)

最后,行16:输出在首行首列的结果

完毕!


递推--顺推

再用从上到下的算法

f[i][j]=max(f[i-1][j],f[i-1][j-1])

ans=max

深搜dfs

记忆化搜索

在dfs的基础上,再开一二维数组,省去形参,添加返回值

洛谷p1216 IOI1994 Day1T1的更多相关文章

  1. 【洛谷 P1216】【IOI1994】【USACO1.5】数字三角形 Number Triangles

    (如此多的标签qaq) 数字三角形 Number Triangles[传送门] 本来打算当DP练的,没想到写着写着成递推了(汗) 好的没有时间了,我们附个ac代码(改天不写): #include< ...

  2. 洛谷P1216 [USACO1.5][IOI1994]数字三角形 Number Triangles (DP入门)

    考虑逆推就行了. 1 #include<bits/stdc++.h> 2 using namespace std; 3 int n; 4 int a[1010][1010]; 5 int ...

  3. 洛谷P1216 数字三角形【dp】

    题目:https://www.luogu.org/problemnew/show/P1216 题意: 给定一个三角形.从顶走到底,问路径上的数字之和最大是多少. 走的时候可以往左下(实际上纵坐标不变) ...

  4. 洛谷——P1216 [USACO1.5]数字三角形 Number Triangles

    P1216 [USACO1.5]数字三角形 Number Triangles 题目描述 观察下面的数字金字塔. 写一个程序来查找从最高点到底部任意处结束的路径,使路径经过数字的和最大.每一步可以走到左 ...

  5. 洛谷 [P1118] IOI1994 数字三角形

    简单dfs 我们注意到,题目中的运算方式与杨辉三角极其相似,所以说本题实际上是一道加权的杨辉三角,搜索系数 #include <iostream> #include <cstdio& ...

  6. 洛谷P1216数字三角形题解

    题目 这道题是一个典型的DP,可以用倒推,顺推的方法,来解这道题.当然用不同的方法他的循环次序是不一样的,所以我们一定要深刻地理解题目的大意,再采用状态转移方程与边界每次求出最优解,并记录循环一遍后就 ...

  7. AC日记——[USACO1.5]数字三角形 Number Triangles 洛谷 P1216

    题目描述 观察下面的数字金字塔. 写一个程序来查找从最高点到底部任意处结束的路径,使路径经过数字的和最大.每一步可以走到左下方的点也可以到达右下方的点. 7 3 8 8 1 0 2 7 4 4 4 5 ...

  8. 洛谷 P1216 [USACO1.5]数字三角形 Number Triangles(水题日常)

    题目描述 观察下面的数字金字塔. 写一个程序来查找从最高点到底部任意处结束的路径,使路径经过数字的和最大.每一步可以走到左下方的点也可以到达右下方的点. 7 3 8 8 1 0 2 7 4 4 4 5 ...

  9. 洛谷P1003 铺地毯 noip2011提高组day1T1

    洛谷P1003 铺地毯 noip2011提高组day1T1 洛谷原题 题目描述 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯.一共有 n ...

随机推荐

  1. WPF 数据模板DataType属性的使用,不用指定ItemTemplate

    <Window x:Class="CollectionBinding.MainWindow"        xmlns="http://schemas.micros ...

  2. 命名管道的C#实现

    1.    命名管道简介 "命名管道"或"命名管线"(Named Pipes)是一种简单的进程间通信(I P C)机制,Microsoft Windows NT ...

  3. jq自定义下拉菜单,当用户点击非自身元素(下拉菜单)本身时关闭下拉菜单

    jq自定义下拉菜单,当用户点击非自身元素(下拉菜单)本身时关闭下拉菜单 截图: 代码如下: //关闭用户菜单 $(document).mousedown(function(e){ var _con = ...

  4. Windows下 Composer 安装 Thinkphp5 的记录.

    首先安装Composer, 下载地址: https://www.phpcomposer.com/ Windows安装过程及其简单,请自行搜索解决. 接下来Win+R, 启动命令行窗口,以下所有操作都是 ...

  5. Delphi的对象注销方法Destroy和free

    当您使用完对象后,您应该及时撤销它,以便把这个对象占用的内存释放出来.您可以通过调用一个注销方法来撤销您的对象,它会释放分配给这个对象的内存. Delphi的注销方法有两个:Destroy和Free. ...

  6. ASP.NET MVC5快速入门--MyFirstWeb并发布到Windows Azure上

    博主刚刚学习ASP.NET MVC5,看着微软的文档一点点学,就把FirstWeb的建立展示一下下啦,本次建立一个带个人身份验证的例子(即有注册登录机制的动态网页),开始,啦啦啦~~ 新建一个项目,选 ...

  7. WordPress中.user.ini 权限问题

    安装完WordPress在给予权限或者删除的时候可能会收到下面的提示. [root@localhost default]# chmod -R 755 /home/wwwroot chmod: 更改&q ...

  8. Codility---Nesting

    Task description A string S consisting of N characters is called properly nested if: S is empty; S h ...

  9. 学习Java,值得你留意的问题(1)更名为《学习Java,容易被你忽略的小细节(1)》

    记得大二快要结束的时候,有个女孩子突然问我“你会Java吗,帮我做大作业好吗?” 实话说,那个女孩真的很漂亮,我当时也非常想帮她.但是我从来没有接触过Java,让我在短短的几天内完成Java程序设计课 ...

  10. python中的基本数据类型之字典

    一.字典的简单介绍 字典是(dict)是python中惟一的一个映射类型,他是以{}括起来的键值对组成,在字典中key是唯一的,在保存的时候,根据key来计算出一个内存地址,然后将key-value保 ...