洛谷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. Android Studio gradle编译 NullPointerException(no error message)解决

    原文:Android Studio gradle编译 NullPointerException(no error message)解决 1.关闭Android Studio  2.找到工程目录下的 . ...

  2. Linux下获取arm的交叉编译工具链

    转载请注明文章:Linux下获取arm的交叉编译工具链 出处:多客博图 这里介绍,Linux下获取arm的交叉编译工具链,比如arm-linux-gnueabihf-gcc.arm-linux-gne ...

  3. GIS基础软件及操作(十二)

    原文 GIS基础软件及操作(十二) 练习十二. ArcMap制图-地图版面设计 设置地图符号-各种渲染方式的使用 使用ArcMap Layout(布局)界面制作专题地图 将各种地图元素添加到地图版面中 ...

  4. 零元学Expression Blend 4 - Chapter 34 啊~!!我不要毛毛的感觉!-使用布局修整「UseLayoutRounding」

    原文:零元学Expression Blend 4 - Chapter 34 啊~!!我不要毛毛的感觉!-使用布局修整「UseLayoutRounding」 本章将介绍UseLayoutRounding ...

  5. Android零基础入门第10节:开发IDE大升级,终于迎来了Android Studio

    原文:Android零基础入门第10节:开发IDE大升级,终于迎来了Android Studio 通过前面几期的学习,我们知道了Android的前世今生,也了解了Android的系统架构和应用组件,也 ...

  6. WPF应用程序如何重启当前的Application

    // Restart current process Method 1 System.Windows.Forms.Application.Restart(); Application.Current. ...

  7. 修改Android Studio默认的API Level(SDK版本)

    原文:修改Android Studio默认的API Level(SDK版本) Android Studio(2.1.2)新建工程的时候只会让你选择最低支持的SDK版本,默认的目标编译SDK版本会以系统 ...

  8. linux 系统中将数据写入文档不能立即保存问题的解决方法

    应用场景: 设备跑的是Linux系统,与PC上位机进行通信,上位机可以给Linux发送设备配置信息,Linux将配置信息写入文件中以备设备断电重启时使用. bug现象: 设备正常运行,设备配置信息为A ...

  9. ring3下利用WMI监视进程创建(vc版)

    #include "stdafx.h" #define _WIN32_DCOM #include <iostream> using namespace std; #in ...

  10. 开源项目 RethinkDB 关闭,创始人总结失败教训(市场定位错误)

    当我们宣布RethinkDB关闭时,我答应写一个调查分析.我花了一些时间来整理所得的教训和经验,现在可以清楚地写出来. 在HN讨论贴中,人们提出了许多关于为什么RethinkDB失败的原因,从莫名的人 ...