数塔 简单的 动态规划

    

挺简单的 , 从下向上将 下一行的 数字向上 一行 加     然后  将 这一行的  再向上 +   加到 最上面的时候 最上面的 就是 最大的值

#include<stdio.h>
#include<algorithm>
using namespace std;
int a[101][101];
int max(int x,int y)
{
    return x>y?x:y;
}
int main()
{
    int i,j,n,t;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&n);
        for(i=0;i<n;i++)
        {
            for(j=0;j<=i;j++)
            {
                scanf("%d",&a[i][j]);    //   输入数塔 完成
            }

        }
        for(i=n-2;i>=0;i--)
        {
            for(j=i;j>=0;j--)
            {
                a[i][j]=max(a[i+1][j]+a[i][j],a[i+1][j+1]+a[i][j]);
            }
        }
        printf("%d\n",a[0][0]);
    }
    return 0;
}
时间: 2024-11-05 02:18:41

数塔 简单的 动态规划的相关文章

HDU 2084 数塔 简单动态规划

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2084 题目大意:有如下所示的数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少? 题目分析:首先我们可以给数塔中的每一个点制定一个坐标.最上面的9的坐标是(1,1),第二行的12的坐标是(2,1),15的坐标是(2,2),以此类推,第i行的第j个数的坐标就是(i,j).我们假设一共有n行,并且设a[i][j]为坐标为(i,j)对应的数,f[i][j]为从(i,j)

HDU 2084 数塔(简单DP入门)

数塔 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 41852    Accepted Submission(s): 24820 Problem Description 在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这样描述的:有如下所示的数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少?

hdu 2084 数塔 (简单dp)

http://acm.hdu.edu.cn/showproblem.php?pid=2084 数塔 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 28668    Accepted Submission(s): 17230 Problem Description 在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这样描述的: 有如下

hdu2084动态规划入门题----数塔

原题:数塔 这个是动态规划入门题,比较简单. 题意是: 一个数字组成的三角形,从上到下找一条路径,使这条路径上数字之和最大. 解题思路,就是要从下往上看.举个例子: 如果你从上到下走到了第4行第1个数,也就是2,那么接下来有两个数可以走19和7,而你必然会选择19. 所以就可以根据这个思路更新上面一行的数.把2更新成2+19=21.18更新成18+10=28,9更新成9+10=19,5更新成5+16=21 重复上面的思路最后第一行累加出来的就是最大值了. 思路很简单,最简单的实现就是你也开一个二

POJ 3176(Cow Bowling )(就是简单的数塔,动态规划)

Cow Bowling Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 14206   Accepted: 9428 Description The cows don't use actual bowling balls when they go bowling. They each take a number (in the range 0..99), though, and line up in a standard

简单的dp hdu 数塔(水题)

数塔 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 21314    Accepted Submission(s): 12808 Problem Description 在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这样描述的: 有如下所示的数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少

动态规划:数塔问题

动态规划问题我训练过一些题目,但是感觉自己掌握的还不是特别好! 下面以一道经典的动态规划题目说明动态规划算法的思想,文末会官方的给出对动态规划的文字叙述. 先看题目:如下图(图片来自百度图片)是一个数塔,从顶部出发在每一个节点可以选择向左或者向右走,一直走到底层,要求找出一条路径,使得路径上的数字之和最大. 思路分析: 这道题目如果使用贪婪算法不能保证找到真正的最大和. 在用动态规划考虑数塔问题时可以自顶向下的分析,自底向上的计算. 从顶点出发时到底向左走还是向右走应取决于是从左走能取到最大值还

动态规划&amp;数塔取数&amp;矩阵取数&amp;背包问题&amp;最大子段和&amp;正整数分组

动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法.在面试笔试中动态规划也是经常作为考题出现,其中较为简单的DP题目我们应该有百分之百的把握顺利解决才可以. 一.动态规划定义动态规划实际上是一类题目的总称,并不是指某个固定的算法.动态规划的意义就是通过采用递推(或者分而治之)的策略,通过解决大问题的子问题从而解决整体的做法.动态规划的核心思想是巧妙地将问题拆分成多个子问题,通过计算子问题而得到整体问题的解.而子

c++动态规划解决数塔问题

#include <iostream>#include <algorithm> using namespace std; /************************************************************************//* 数塔问题 *//************************************************************************/const int N = 50;//为了算法写