zoukankan      html  css  js  c++  java
  • 数字三角形/数塔问题(DP入门题)

    有形如下图所示的数塔,从顶部出发,在每一结点可以选择向左走或是向右走,一起走到底层,要求找出一条路径,使路径上的值最大。

    样例输入:

    5

    13

    11 8

    12 7 26

    6 14 15 8

    12 7 13 24 11

    样例输出:

    86(13->8->26->15->24)

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #define maxn 105
    using namespace std;
    int n;
    int a[maxn][maxn]; 
    int dp[maxn][maxn];   //自底向上,记录从点(i,j)出发到数塔底层的路径最大和 
    int main()
    {
    	int i,j;
    	scanf("%d",&n);
    	for(i=0;i<n;i++)
    		for(j=0;j<=i;j++)
    			scanf("%d",&a[i][j]);
    	memset(dp,0,sizeof(dp));
    	for(i=0;i<n;i++)  //填数塔最底层
    		dp[n-1][i]=a[n-1][i];
    	for(i=n-2;i>=0;i--)   //更新除数塔最底层外的各个点的路径最大和 
    		for(j=0;j<=i;j++)
    			dp[i][j]=max(dp[i+1][j],dp[i+1][j+1])+a[i][j];
    	printf("%d
    ",dp[0][0]);
    	return 0;
    }
    

    注释:最简单的动态规划题(DP)还是没想出来怎么做,
    这个题只要求要最大的数,所有需要自低向上计算每一个DP[i][j]的最大值一直到DP[0][0]就是最后的答案

    状态转移方程:dp[i][j]=max(dp[i+1][j],dp[i+1][j+1])+a[i][j];

  • 相关阅读:
    Linux 安装 MysQl
    Linux上安装pip以及setuptools
    Linux 安装 python3
    基础 项目部署 上线
    wepsocket 了解一下
    scrapy之中间件
    scrapy之定制命令
    网络爬虫之scrapy框架设置代理
    爬虫之Xpath详解
    3.8软件测试模型
  • 原文地址:https://www.cnblogs.com/saber114567/p/9350134.html
Copyright © 2011-2022 走看看