luogu P1216 [UASCO1.5]数字三角形 Number Triangles

来源:互联网 发布:率土之滨数据 编辑:程序博客网 时间:2024/06/03 08:45

题目描述

观察下面的数字金字塔。

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

  • ******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

又是一道动态规划题。
这里我从下向上推,倒数第二行的任意元素可以取左下或者右下角的元素,然后我们要使结果最大化,通过比较左下角元素和右下角元素,我们可以得到通过倒数第二行任意元素的唯一最优路径,而此时我们可以将以推算出来的路径之和给最上面的元素,那么问题又转化成了最初的样子,以此推论,我们可以找到整个金字塔的最优路径。
下面贴上代码:

#include<cstdio>#include<algorithm>using namespace std;int dp[1005][1005];int main(void){    int r;    scanf("%d",&r);    for(int i=1;i<=r;i++)        for(int j=1;j<=i;j++)            scanf("%d",&dp[i][j]);    for(int i=r-1;i>=1;i--)        for(int j=1;j<=i;j++)            dp[i][j]=max(dp[i+1][j],dp[i+1][j+1])+dp[i][j];        printf("%d\n",dp[1][1]);   return 0;}
阅读全文
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 10个月孩子拉肚子怎么办 不满月的宝宝拉肚子怎么办 一周岁宝宝发烧腹泻呕吐怎么办 6个月宝宝37度怎么办 1岁宝宝发烧37.2怎么办 新生儿发烧37度3怎么办 两个月宝宝抵抗力差怎么办 6月宝宝着凉拉稀怎么办 六个月的宝宝拉肚子怎么办 衣服颜色太深了怎么办 一多半宝宝爱喝水不爱吃饭怎么办 十个月宝宝不爱吃饭怎么办 十个月宝宝突然不爱吃饭怎么办 二十个月宝宝不爱吃饭怎么办 十个月的宝宝不爱吃饭怎么办 6年级学生数学差怎么办 打印机打不出来就是一张白纸怎么办 wps表格下拉数字不递增怎么办 wps表格圈怎么打出来怎么办 手表固定圈掉了怎么办 起来觉得头晕头胀怎么办? 孩子不好好写作业怎么办 孩子考试考差了怎么办 孩子计算题马虎大意怎么办 二年级孩子不认字怎么办 发现计算上的错误怎么办 孩子不好好做作业怎么办 手破了红肿了怎么办呢 老师反应孩子在校粗心胆小怎么办 四年级的学生计算粗心怎么办 老打孩子骂孩子怎么办 站久了脚肿了怎么办 孩子初中了书写越来越潦草怎么办 给孩子自由孩子无法无天怎么办 孩子挑食幼儿园老师该怎么办 老师说孩子挑食家长怎么办 工作中老是粗心不细心怎么办 小孩数学总是特别粗心该怎么办 孩子起范疙瘩的怎么办 做题马虎不认真怎么办 孩子考差了家长怎么办