美文网首页
简单的DP算法--数塔

简单的DP算法--数塔

作者: Kevin1996cn | 来源:发表于2017-07-19 15:56 被阅读0次

在进行动态规划的时候需要注意:
1、求出状态转移方程。
2、要避免出现低效率的递归。可以用数组进行保存,实现记忆化查找。
3、需要有一个出口(边界),否则会陷入死循环。

例:杭电2084数塔

题意:求出从第一个点只能走相邻节点的最大值。

分析:每个点的最大值由它下面的两个节点决定,可以得到状态转化方程。

a[i][j]=a[i][j]+max(a[i+1][j],a[i+1][j+1])

#include<iostream>
#include<math.h>
#include<algorithm>
#include<memory.h>
using namespace std;

int main()
{
    int c;
    cin>>c;
    while(c--)
    {
        int row;
        cin>>row;

        int a[105][105];
        memset(a,0,sizeof(a));

        for(int i=1;i<=row;i++)
        {
            for(int j=1;j<=i;j++)
            {
                cin>>a[i][j];
            }
        }


        for(int i=row;i>=1;i--)
        {
            for(int j=i;j>=1;j--)
            {
                a[i][j]=a[i][j]+max(a[i+1][j],a[i+1][j+1]);   //状态转移方程

            }
        }

        cout<<a[1][1]<<endl;


    }
}

类似的题目还有最长公共子序列、最长上升子序列等等。

相关文章

  • 简单的DP算法--数塔

    在进行动态规划的时候需要注意:1、求出状态转移方程。2、要避免出现低效率的递归。可以用数组进行保存,实现记忆化查找...

  • 【每周一题】2017.3.20 HDU2084 解题报告

    题目描述 在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这样描述的: 有如下所示的数塔,要求从顶层走到底层...

  • 数塔(DP)hdu2084

    在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这样描述的: 有如下所示的数塔,要求从顶层走到底层,若每一步...

  • DP-转移方程

    搞个算法笔记dp的总结,晴神tql了8!!!! 数塔 dp[i][j]为从第i行第j个数字出发的到达最底层的所有路...

  • 签到题 DP

    DP算法,经典,求解 如图所示的数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是...

  • HDU 2084 数塔DP

    解题思路:从最顶层或者最底层出发,推到最底层或者最顶层,然后找出其中那条路线的值最大 我才用的是从下往上,代码如下

  • leetcode 304

    基本思路:使用DP维护,算法基本是小学奥数级别。 C++ Java

  • floyd算法解析

    floyd算法可求得多源点间的最短路径算法使用动态规划求解: 状态转移方程 dp[i][j][k]=min(dp[...

  • CUC-SUMMER-5-A

    A - 数塔 HDU - 2084 已经告诉你了,这是个DP的题目,你能AC吗? Input输入数据首先包括一个整...

  • 664. Strange Printer

    思路:很显然,使用DP算法,过程如下:1.dp[i][i] = 12.dp[i][i+1] = 1 if s[i]...

网友评论

      本文标题:简单的DP算法--数塔

      本文链接:https://www.haomeiwen.com/subject/rjulkxtx.html