zoukankan      html  css  js  c++  java
  • HDU 2084 数塔 动态规划

    解题报告:

    题目大意:给定一个有N层的数塔,数塔的第i层有i个数,从数塔的第一层出发,每次只能经过相邻的两条路,求走到最底层时走过的那条路线上的数的和最大是多少?

    典型的动态规划,一看到这题,毫不犹豫的用了递归写,测试也过了,但交上去就WA了,才知道,递归调用函数是很花时间的,后来改成直接用for循环,46s就过了。

    递归的公式是map[i][j]+=(map[i+1][j]>map[i+1][j+1]? map[i+1][j]:map[i+1][j+1]);就是说当我现在在第i层的第j个数的时候,这个位置可以由第i+1层第j个或者第i+1层第j+1个得到,这就比较一下,这两种走法,哪种走法的和大一点就选择哪一种走法,这样最后返回map[1][1]就是我们要的最大的和。

     1 #include<cstdio>
     2 int map[105][105],T,N;
     3 int dfs() {
     4     for(int i=N-1;i>=1;--i)
     5     for(int j=1;j<=i;++j)
     6     map[i][j]+=(map[i+1][j]>map[i+1][j+1]? map[i+1][j]:map[i+1][j+1]);
     7     return map[1][1];
     8 }
     9 int main() {
    10     scanf("%d",&T);
    11     while(T--) {
    12         scanf("%d",&N);
    13         for(int i=1;i<=N;++i)
    14         for(int j=1;j<=i;++j)
    15         scanf("%d",&map[i][j]);
    16         printf("%d\n",dfs());
    17     }
    18     return 0;
    19 }
    View Code
  • 相关阅读:
    第二次作业
    第一次作业
    第五次作业
    第四次作业
    第三次作业
    第二次作业
    第一次作业
    HTML标签分类
    HTML属性与事件的搭配使用
    HTML全局属性和全局事件属性
  • 原文地址:https://www.cnblogs.com/xiaxiaosheng/p/3100344.html
Copyright © 2011-2022 走看看