zoukankan      html  css  js  c++  java
  • hdu2084动态规划入门题----数塔

    原题:数塔

    这个是动态规划入门题,比较简单。

    题意是:

    一个数字组成的三角形,从上到下找一条路径,使这条路径上数字之和最大。


    解题思路,就是要从下往上看。举个例子:

    如果你从上到下走到了第4行第1个数,也就是2,那么接下来有两个数可以走19和7,而你必然会选择19。

    所以就可以根据这个思路更新上面一行的数。把2更新成2+19=21。18更新成18+10=28,9更新成9+10=19,5更新成5+16=21

    重复上面的思路最后第一行累加出来的就是最大值了。

    思路很简单,最简单的实现就是你也开一个二维数组去存储动归过程的值。但是空间有优化的余地,就是不新开数组,使用原数组的最后一行来保存数据,因为我们每次只需要一行的数据,只要把累加的情况一直作用在最后一行上,就行了。那么最后一行的第一个数就是最大值。


    #include <stdio.h>
    int main()
    {
      int c,n,num[100][100];
      scanf("%d",&c);
      while(c--)
      {
        int i,j;
        scanf("%d",&n);
        for(i=0;i<n;i++)
          for(j=0;j<=i;j++)
    	scanf("%d",&num[i][j]);
        for(i=n-2;i>=0;i--)
          for(j=0;j<=i;j++)
          {
    	if(num[i][j]+num[n-1][j]>num[i][j]+num[n-1][j+1])
    	  num[n-1][j]=num[i][j]+num[n-1][j];
    	else
    	  num[n-1][j]=num[i][j]+num[n-1][j+1];
          }
          
        printf("%d
    ",num[n-1][0]);
      }
      return 0;
    }


  • 相关阅读:
    【6666】分组背包
    Designing a RESTful API with Python and Flask 201
    把手账打印成书 把回忆装订成册
    sql基本操作语句
    sql serve基础
    sql serve存储过程
    TCP/IP 之 大明王朝邮差 (转)
    HBASE基础(4):语法(2) API (1) DDL
    bochsrc
    CentOS 6 bochs-2.6 gdb 调试 linux 0.11——bochsrc-hdc-gdb.bxrc
  • 原文地址:https://www.cnblogs.com/unclejelly/p/4082072.html
Copyright © 2011-2022 走看看