码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2014-06-16 12:53:25      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:class   blog   code   http   tar   get   

原题:数塔

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

题意是:

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

bubuko.com,布布扣

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

如果你从上到下走到了第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\n",num[n-1][0]);
  }
  return 0;
}


hdu2084动态规划入门题----数塔,布布扣,bubuko.com

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

标签:class   blog   code   http   tar   get   

原文地址:http://blog.csdn.net/guodongxiaren/article/details/28090261

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!