#1037 : 数字三角形

时间限制:10000ms
单点时限:1000ms
内存限制:256MB

问题描写叙述

小Hi和小Ho在经历了螃蟹先生的任务之后被奖励了一次出国旅游的机会,于是他们来到了大洋彼岸的美国。

美国人民的生活很有意思,常常会有形形色色、奇奇怪怪的活动举办,这不。小Hi和小Ho刚刚下飞机,就赶上了当地的迷宫节活动。迷宫节里展览出来的迷宫都特别的有意思,可是小Ho却相中了一个事实上并不怎么像迷宫的迷宫——由于这个迷宫的奖励很丰富~

于是小Ho找到了小Hi,让小Hi帮助他获取尽可能多的奖品。小Hi把手一伸道:“迷宫的介绍拿来。”

小Ho选择的迷宫是一个被称为“数字三角形”的n(n不超过200)层迷宫。这个迷宫的第i层有i个房间。分别编号为1..i。除去最后一层的房间。每一个房间都会有一些通往下一层的房间的楼梯,用符号来表示的话,就是从第i层的编号为j的房间出发会有两条路,一条通向第i+1层的编号为j的房间。还有一条会通向第i+1层的编号为j+1的房间。而最后一层的全部房间都仅仅有一条离开迷宫的道路。这种道路都是单向的,也就是说当沿着这些道路前往下一层的房间或者离开迷宫之后。小Ho没有办法再次回到这个房间。迷宫里同一时候仅仅会有一个參与者,而在每一个參与者进入这个迷宫的时候。每一个房间里都会生成一定数量的奖券。这些奖券能够在通过迷宫之后兑换各种奖品。小Ho的起点在第1层的编号为1的房间,如今小Ho悄悄向其它參与者弄清楚了每一个房间里的奖券数量。希望小Hi帮他计算出他最多能获得多少奖券。

提示一:盲目贪心不可取,搜索计算太耗时    

 

                                                                                                                                                                                                     提示二:记忆深搜逞神威,宽度优先解难题

   提示三:总结归纳提公式,降低冗余是真理

                                                                                                                                            输入

每一个測试点(输入文件)有且仅有一组測试数据。

每组測试数据的第一行为一个正整数n,表示这个迷宫的层数。

接下来的n行描写叙述这个迷宫中每一个房间的奖券数,当中第i行的第j个数代表着迷宫第i层的编号为j的房间中的奖券数量。

測试数据保证。有100%的数据满足n不超过100

对于100%的数据,迷宫的层数n不超过100

对于100%的数据,每一个房间中的奖券数不超过1000

对于50%的数据,迷宫的层数不超过15(小Ho表示2^15才3万多呢,也就是说……)

对于10%的数据,迷宫的层数不超过1(小Hi非常好奇你的边界情况处理的怎样?~)

对于10%的数据。迷宫的构造满足:对于90%以上的结点,左边道路通向的房间中的奖券数比右边道路通向的房间中的奖券数要多。

对于10%的数据,迷宫的构造满足:对于90%以上的结点,左边道路通向的房间中的奖券数比右边道路通向的房间中的奖券数要少。

输出

对于每组測试数据。输出一个整数Ans。表示小Ho能够获得的最多奖券数。

例子输入
5
2
6 4
1 2 8
4 0 9 6
6 5 5 3 6
例子输出
28
AC代码:
#include<bits/stdc++.h>
using namespace std;
int dp[1010][1010];
int main()
{
    int t,maxx=0;
    scanf("%d",&t);
    for(int i=1; i<=t; i++)
    {
        for(int j=1; j<=i; j++)
        {
            scanf("%d",&dp[i][j]);
            dp[i][j]+=max(dp[i-1][j],dp[i-1][j-1]);
            maxx=max(maxx,dp[i][j]);
        }
    }
    printf("%d\n",maxx);
}


posted on 2017-07-07 21:54  yutingliuyl  阅读(351)  评论(0编辑  收藏  举报